APR を使用して Tomcat サーバー (8.0.23) でクライアント証明書認証 (相互 SSL 認証) を使用しようとしています。これはすべて、通常の Java ベースの io を使用する tomcat では問題なく動作しますが、ネイティブ io (および openssl ベースの暗号化) を使用する場合、クライアント署名の検証中に失敗します。openssl s_client を使用してこれを失敗させることができます (以下を参照) - SSL アラート番号 51 をログに記録します (私はこれを助けなしで広範囲にグーグル検索しました)。
openssl s_server を実行し、Tomcat 構成にできるだけ近づけて構成すると、動作します!! どちらの場合もまったく同じ s_client コマンドを使用しています (ポートのみが異なります)。すべてのサーバーとクライアントは同じマシンで実行されます。
どんな助けでも大歓迎です。
Tomcat: 8.0.23 Openssl
: 1.0.2a-fips 2015 年 3 月 19 日
オペレーティング システム: CentOS Linux 7 (コア)
CPE OS 名: cpe:/o:centos:centos:7
カーネル: Linux 3.10.0-229.el7.x86_64
Tomcat コネクタの設定:
<Connector port="8444" protocol="HTTP/1.1"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
SSLCipherSuite="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:ECDHE-RSA-AES256-SHA384 :DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128 -GCM-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA" SSLHonorCipherOrder="true"
SSLCertificateFile="/var/keys/star_dmiapps_com.cer"
SSLCertificateChainFile="/ var/keys/star_dmiapps_com.chain.cer"
SSLCertificateKeyFile="/var/keys/star_dmiapps_com.key"
SSLPassword="xxxxxxx"
SSLVerifyClient="optional"
SSLVerifyDepth="4"
SSLCACertificateFile="/usr/local/keys/uberChain.crt"/>
s_server コマンドライン
openssl s_server -cert /var/keys/star_dmiapps_com.cer -cipher "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-SHA :ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128 -SHA" -serverpref -key /var/keys/star_dmiapps_com.key -pass pass:xxxxxxxx -CAfile /usr/local/keys/uberChain.crt -verify 4
tomcat と通信するときの s_client からの出力:
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = Maryland, L = Bethesda, O = "Digital Management, Inc.", CN = .dmiapps.com
検証 return:1
140679845054368:error:1409441B:SSL ルーチン:SSL3_READ_BYTES:tlsv1アラート復号化エラー:s3_pkt.c:1259:SSL アラート番号 51
140679845054368:エラー:140790E5:SSL ルーチン:SSL23_WRITE:ssl ハンドシェイクの失敗:s23_lib.c:184:接続
(00000003)
証明書チェーン
0 s:/C=US/ST =メリーランド州/L=Bethesda/O=Digital Management, Inc./CN= .dmiapps.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
i:/C=US/O=DigiCert Inc /OU=www.digicert.com/CN=DigiCert グローバル ルート CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert グローバル ルート CA
i:/C=US/O =DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server certificate
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQA+HdMPwp8NAjvkVYy+Y4fDANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTE3MDAwMDAwWhcN
.
.
.
89v8qonrsSCd7AGtKTqf+wp6S0LT5KIbvCAq2ZnJ2O8UI1wESswSzZsq1CMOmdl2
gOlXzAf6+sF9jWIyvB8EQYF057zNk0zKEmBs0cyBRLgnV9Zj3bZQxFt+5ZMdODCn
D8d/WE5cE70nnsqcCIiBM5du
-----END CERTIFICATE-----
subject=/C=US/ST=Maryland/L=Bethesda/O=Digital Management, Inc./CN=*.dmiapps.com issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
受け入れ可能なクライアント証明書 CA 名
/C=US/ST=Maryland/O=DMI/CN=DMI Intermediate CA
/C=US/O=DigiCert Inc/CN=DigiCert SHA2 セキュア サーバー CA
/C=US/ST=Maryland/L=Bethesda/O=DMI/CN=DMI ルート CA
/C=US/O=DigiCert Inc/OU=www.digicert.com/CN =DigiCert グローバル ルート CA
サーバーの一時キー: ECDH、prime256v1、256 ビット
SSL ハンドシェイクは 4278 バイトを読み取り、4612 バイト
を書き込みました。新しい、TLSv1/SSLv3、暗号は ECDHE-RSA-AES256-SHA384 です。
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID:
Session-ID-ctx:
Master-Key: DEEA668F36C1D567B3CA327338737E674BB89D8A117D31466DC3104E6E02C7CF8009BD41F509A17104096BCAFE95F240
Key -Arg: なし
Krb5 プリンシパル: なし
PSK ID: なし
PSK ID ヒント: なし
開始時間: 1452722344
タイムアウト: 300 (秒)
戻りコードを確認: 0 (ok)
s_server と通信するときの s_client からの出力
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert SHA2 Secure Server CA
verify return:1
depth=0 C = US, ST = Maryland, L = Bethesda, O = "Digital Management, Inc.", CN = .dmiapps.com
verify return:1
CONNECTED(00000003)
証明書チェーン 0 s:/C= US/ST=Maryland/L=Bethesda/O=Digital Management, Inc./CN= .dmiapps.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US /O=DigiCert Inc/CN=DigiCert SHA2 セキュア サーバー CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert グローバル ルート CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert グローバル ルート CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server certificate
-----BEGIN CERTIFICATE-----
MIIFHjCCBAagAwIBAgIQA+HdMPwp8NAjvkVYy+Y4fDANBgkqhkiG9w0BAQsFADBN
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTQxMTE3MDAwMDAwWhcN
.
.
.
89v8qonrsSCd7AGtKTqf+wp6S0LT5KIbvCAq2ZnJ2O8UI1wESswSzZsq1CMOmdl2
gOlXzAf6+sF9jWIyvB8EQYF057zNk0zKEmbs0cyBRLgnV9Zj3bZQxFt+5ZMdODICnCIENDiBMdusq -----
WE5cE70nnsq
-----
subject=/C=US/ST=Maryland/L=Bethesda/O=Digital Management, Inc./CN=*.dmiapps.com issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 セキュア サーバー CA
受諾可能クライアント証明書 CA 名
/C=US/ST=メリーランド/O=DMI/CN=DMI 中間 CA
/C=US/ST=メリーランド/L=Bethesda/O=DMI/CN=DMI ルート CA
/C=US/O =DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
Server Temp Key: ECDH, prime256v1, 256 ビット
SSL ハンドシェイクは 5849 を読み取りましたバイトおよび書き込まれた 4861 バイト
新規、TLSv1/SSLv3、暗号は ECDHE-RSA-AES256-SHA384
サーバー公開鍵は 2048 ビット
セキュアな再ネゴシエーションはサポートされています
圧縮:なし
拡張:なし SSL-
セッション:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID: A2978962A54C12A5EEB008A55BAD06872EA1B6BBBFCFF48C62FD026776BB0AAF
Session-ID-ctx:
Master-Key: 5D55FD5EF5B5CBDD052F2420FC0D154771F655074BDD58A23B44A20B415E0C404F1F4848E658657685FB797386C28B88
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS sessionチケットの有効期間のヒント: 300 (秒)
TLS セッション チケット:
0000 - 2d 07 bf e6 1e 1d c0 b4-f8 4c 3a 4d f1 c5 4d b7 -........L:M..M.
0010 - 36 c9 d6 b2 43 ae c1 ea-2c 5a 2c 81 5a 7b 0f 09 6...C...,Z,.Z{..
0020 - b0 01 66 dc b6 d1 c7 88-7a a2 d6 38 7b 82 75 02 ..f.....z..8{.u.
.
.
.
0590 - 46 b9 db b2 03 b4 4d 54-f3 27 7c 8e bf a2 44 17 F.....MT.'|...D.
05a0 - 54 e5 61 c9 f0 ea 13 aa-4d f4 84 fb b7 34 c5 b1 Ta....M....4..
Start Time: 1452722382<br/>
Timeout : 300 (sec)<br/>
Verify return code: 0 (ok)<br/>