1

ここ数日、稼働中の CAS サーバー (Jasig CAS) を Ubuntu 10.10 にインストールしようとしました。Tomcat 6 をインストールし、SSL ポート 8443 用に構成 (server.xml) しました。

<!-- 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 証明書です。さらに、Windows テスト サーバー (apache2 - xampp) 用の x509v3 証明書を作成しました (両方のサーバーは同じ LAN にあり、IP は 10.0.0.* です)。これらの証明書は、java ディレクトリにある Java キーストア (cacerts) にインストールされます。クライアント証明書の「代替サブジェクト名」に常に問題があったため、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 を使用してテスト済み)。

今、難しい仕事が来ます。Windowsマシンで、phpでプログラムされたphpCASというモジュールを使用して、CASサーバーと通信しました。モジュールはコールバック URL を CAS サーバーに送信し、サーバーはプロキシ チケットを返信します。

しかし、両方のサーバー間で有効な SSL ハンドシェイクを保証できませんでした。openssl -s_client -connect... 両方のサーバーでエラーが表示されなかったので、完全な SSL ハンドシェイクをデバッグしました (ここでは関連部分のみを示します)。

...

* ServerHelloDone

* ClientKeyExchange、RSA PreMasterSecret、SSLv3 http-apr-8443-exec-3、書き込み: SSLv3 ハンドシェイク、長さ = 132 セッション

KEYGEN: プレマスター シークレット: 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.,....." CONNECTION KEYGEN: Client 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. Client MAC write Secret: 0000: C9 20 BF A5 A6 2B C1 DA A8 4E 93 E0 DE 76 06 53 . ...+. ..N...vS Server MAC write Secret: 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....Oz.5.. サーバー書き込みキー: 0000: 3A 7B 6A 6E 66 E9 E1 42 A4 3C C3 19 D0 7F 21 FF :.jnf..B.<....!. ... この暗号には IV が使用されていません

http-apr-8443-exec-3、書き込み: 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 アラート: 致命的、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 の使用を強制しました。

ご提案いただきありがとうございます。

4

0 に答える 0