Как решить проблему RECV SSLv3 ALERT: фатально, bad_record_mac - PullRequest
1 голос
/ 27 ноября 2011

В последние несколько дней я пытался установить работающий сервер CAS (Jasig CAS) на Ubuntu 10.10. Я установил Tomcat 6 и настроил (server.xml) его для порта SSL 8443:

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443"
        maxHttpHeaderSize="8192"
        maxThreads="150"
        minSpareThreads="25"
        disableUploadTimeout="true"
        acceptCount="100"
        scheme="https"
        secure="true"
        clientAuth="false"
        SSLEnabled="true"
        SSLProtocol="SSLv3"
        SSLCertificateFile="/etc/ssl/certs/server_cert.pem"
        SSLCertificateKeyFile="/etc/ssl/private/server_key.pem"
        SSLCACertificateFile="/etc/ssl/certs/ca_cert.pem"
        SSLCACertificatePath="/etc/ssl/certs"
        SSLPassword="password"
     />

server_cert.pem, server_key.pem - это самозаверяющие сертификаты x509. Кроме того, я создал сертификат x509v3 для тестового сервера Windows (apache2 - xampp) (оба сервера находятся в одной локальной сети и имеют IP-адреса 10.0.0. *). этот сертификат установлен в хранилище ключей Java (Cacerts), которое находится в каталоге Java. Так как у меня всегда были проблемы с «альтернативным именем субъекта» в сертификате клиента, я использовал расширенную версию файла конфигурации openssl для его создания.

Файл конфигурации apache2 ssl выглядит следующим образом:

<IfModule ssl_module>
....
<VirtualHost 10.0.0.2:443>
SSLEngine on
ServerName 10.0.0.2:443
#ServerAlias 10.0.0.2

DocumentRoot c:/xampp/htdocs
SSLProtocol -all +SSLv3
SSLCertificateFile C:/xampp/ssl/certs/powercomputer_cert.pem
SSLCertificateKeyFile C:/xampp/ssl/private/powercomputer_key.pem
SSLCACertificateFile C:/xampp/ssl/certs/ca_cert.pem
</VirtualHost>
...
</IfModule>

SSL-соединения работают на обоих серверах (протестировано с использованием IE и Firefox).

Теперь наступает трудная задача. Я использовал модуль phpCAS, запрограммированный в php, на машине с Windows для связи с сервером CAS. Модуль отправляет URL-адрес обратного вызова на сервер CAS, а сервер отправляет билет прокси-сервера и т. Д. И т. Д.

НО Я не смог обеспечить корректное рукопожатие SSL между обоими серверами. openssl -s_client -connect ... для обоих серверов он не показал никаких ошибок, поэтому я отладил полное рукопожатие SSL (здесь только соответствующая часть):

...

* ServerHelloDone

* ClientKeyExchange, RSA PreMasterSecret, SSLv3 http-apr-8443-exec-3, ЗАПИСЬ: SSLv3 Рукопожатие, длина = 132 СЕССИЯ

KEYGEN: PreMaster Secret: 0000: 03 00 78 96 8F EE D3 4A 2F A8 CC F8 F9 D7 2F CB ..x .... J /...../. 0010: 9E 3A 58 66 43 0E D5 49 3C 8A B0 3D 3F 2C 89 A0.: XfC..I <.. =?, .. 0020: BC E2 B2 12 F8 D9 55 73 F2 2C 1F CC 81 80 94 22 ...... Us., ..... "КЛЮЧ ПОДКЛЮЧЕНИЯ: Клиент Nonce: 0000: 4E D1 94 ED 32 7F FA 72 40 3C 43 C8 05 E2 62 D0 N ... 2..r @ 91 E2 D0 1C 90 3D 30 DD ..n; W6 ....... = 0. Главный секрет: 0000: EB 25 F0 A2 A3 FF 37 06 BB 79 41 C5 E5 07 1C 64.% .... 7..yA .... d 0010: 77 66 A3 37 71 97 63 AF DB A2 79 47 85 E2 9C 74 wf.7q.c ... yG ... t 0020: 5F 14 3D 26 57 E8 AD 9B A1 7C AC 33 00 04 4A E0 _. = & W ...... 3..J. Секретная запись MAC-адреса клиента: 0000: C9 20 BF A5 A6 2B C1 DA A8 4E 93 E0 DE 76 06 53. ... + ... N ... v.S Сервер MAC Секрет записи: 0000: 66 77 5A 3E BD E7 19 55 A4 80 1E E6 8A 9E 2A 5E fwZ> ... U ...... * ^ Клиент ключ записи: 0000: 58 D1 29 38 13 D8 83 EF 4F BD 7A 18 C8 35 D7 B4 X.) 8 .... O.z..5 .. Ключ записи сервера: 0000: 3A 7B 6A 6E 66 E9 E1 42 A4 3C C3 19 D0 7F 21 FF: .jnf..B. <....!. ... для этого шифра не используется IV </p>

http-apr-8443-exec-3, WRITE: SSLv3 Изменить спецификацию шифра, длина = 1

* Законченные данные проверки: {71, 19, 125, 80, 118, 60, 64, 122, 243, 112, 45, 18, 254, 144, 12, 143, 221, 125, 10, 94, 15, 221, 122, 21, 90, 190, 76, 224, 224, 57, 67, 172, 228, 75, 181, 228}

* http-apr-8443-exec-3, НАПИСАТЬ: SSLv3 Рукопожатие, длина = 56 http-apr-8443-exec-3, ЧИТАЙТЕ: оповещение SSLv3, длина = 2

http-apr-8443-exec-3, RECV SSLv3 ALERT: фатально, bad_record_mac

http-apr-8443-exec-3, называемый closeSocket () http-apr-8443-exec-3,

обработка исключения: javax.net.ssl.SSLException: получено фатальное предупреждение:

bad_record_mac 2011-11-27 02: 39: 57,315 ОШИБКА

[org.jasig.cas.util.HttpClient] -

bad_record_mac> javax.net.ssl.SSLException: получено фатальное предупреждение:

bad_record_mac в sun.security.ssl.Alerts.getSSLException (Alerts.java:208) в sun.security.ssl.Alerts.getSSLException (Alerts.java:154) в ....

Я не нашел никакого решения за последние несколько дней, и я действительно не знаю, в чем проблема. Кстати, я вынужден использовать SSLv3.

Большое спасибо за любые предложения.

...