2011-11-14 12 views
24

openssl実行ファイルを使用して、コンソールに鍵とcsrを作成しました。 その後、私はCAにcsrを送り、証明書を取り戻しました。今私はそれをTomcatにインポートしたいと思います。Tomcatは中間証明書(https)を配信しません

だから、私は、キーと私の証明書のうちPKCS#12ファイル作成:

openssl pkcs12 -export -in mycert.cert -inkey mykey.pem -out key_and_cert.p12 

をし、それを含むキーストアを作成しました:

keytool -importkeystore -deststorepass [password] -destkeystore keystore.jks -srckeystore key_and_cert.p12 -srcstoretype PKCS12 -srcstorepass [password] 

それから私は、中間証明書チェーンをインポートします。 CRT:ここ

keytool -import -trustcacerts -alias root -file chain.crt -keystore keystore.jks 

"のkeytool -keystoreたkeystore.jks -list" の出力:

Keystore-Typ: JKS 
Keystore-Provider: SUN 

Ihr Keystore enthält 2 Einträge. 

root, 14.11.2011, trustedCertEntry, 
Zertifikatsfingerabdruck (MD5): [fingerprint] 
1, 14.11.2011, PrivateKeyEntry, 
Zertifikatsfingerabdruck (MD5): [fingerprint] 

Tomcatのserver.xmlには含まれています。私はTomcatを再起動すると

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="150" scheme="https" secure="true" 
      clientAuth="false" URIEncoding="UTF-8" compression="on" 
      sslProtocol="TLS" 
      keystoreFile="/[absolute-path]/keystore.jks" 
      keystorePass="[password]" /> 

、それはcatalina.outにエラーをログに記録していない、すべてがOKのようです。 しかし、私は、Firefoxを実行すると、それが実行

[domain] uses an invalid security certificate. 
The certificate is not trusted because no issuer chain was provided. 
(Error code: sec_error_unknown_issuer) 

"opensslのs_client -connect [ドメイン]:443 -showcertsは" 報告私はTomcatは、それが中間証明書を提供していないと思います

CONNECTED(00000003) 
depth=0 C = DE, OU = Domain Control Validated, CN = [domain] 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 C = DE, OU = Domain Control Validated, CN = [domain] 
verify error:num=27:certificate not trusted 
verify return:1 
depth=0 C = DE, OU = Domain Control Validated, CN = [domain] 
verify error:num=21:unable to verify the first certificate 
verify return:1 
--- 
Certificate chain 
0 s:/C=DE/OU=Domain Control Validated/CN=[domain] 
    i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Domain Validation CA - G2 
-----BEGIN CERTIFICATE----- 
[certificate from mycert.cert] 
-----END CERTIFICATE----- 
--- 
Server certificate 
subject=/C=DE/OU=Domain Control Validated/CN=[domain] 
issuer=/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Domain Validation CA - G2 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 1777 bytes and written 289 bytes 
--- 
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : SSLv3 
    Cipher : ECDHE-RSA-AES256-SHA 
    Session-ID: [session-id] 
    Session-ID-ctx: 
    Master-Key: [master-key] 
    Key-Arg : None 
    PSK identity: None 
    PSK identity hint: None 
    Start Time: 1321268519 
    Timeout : 7200 (sec) 
    Verify return code: 21 (unable to verify the first certificate) 
--- 

を返します。それを知っている。私は何ができますか?

追加情報: -importkeystoreコマンドはチェーンをチェックしないため、pkcs12証明書をインポートするときに証明書チェーンエラーは発生しません。私は中間証明書を最初にインポートしてから、-importkeystoreを呼び出そうとしました。私は同じ結果を得た。

編集: 私はちょうどPKCS#12証明書に直接チェーンを挿入することによって、別の方法を試してみましたが、次のエラーを取得:

$ openssl pkcs12 -export -CAfile chain.pem -in mycert.cert -inkey mykey.pem -out key_and_cert.p12 -name tomcat -chain 
Error unable to get issuer certificate getting chain. 

しかし、チェーン証明書はokです:

$ openssl verify chain.pem 
chain.pem: OK 
+0

チェーンPEMにルートCAがありますか? – njzk2

+0

あなたは "openssl verify -CAfile chain.pem mycert.cert"を与えますか? – njzk2

答えて

6

最後に私はそれを働かせました。クリーンなソリューションではありませんが、機能します。私は私のローカルの/ etc/sslの/ certsのに中間証明書を追加してから、私はこの結果のファイルは、現在動作しているよう

keytool -importkeystore -deststorepass [password] -destkeystore keystore.jks -srckeystore key_and_cert.p12 -srcstoretype PKCS12 -srcstorepass [password] 

経由JKSに変換したPKCS12証明書

openssl pkcs12 -export -in cert.pem -inkey key.key -out key_and_cert.p12 -chain 

と呼ばれ、Tomcatが提供します/ etc/ssl/certsディレクトリに中間証明書を持たないクライアントにも証明書チェーンを送信します。 しかし、私は/ etc/ssl/certsを変更することなく方法がなければならないと思います。

+0

あなたはこれに対してよりクリーンなソリューションを見つけたでしょうか?私は非常に似た問題があります。 – njzk2

+0

残念ながらあなたは証明書を/ etc/ssl/certsから削除することはできません – Heinzi

+0

このヒントありがとうございました(実際には私が与えられたチェーンが何らかの形で不完全であることを認識しました) – njzk2

12

私は発行者のルート証明書を見つけて、その上に中間証明書を同じファイルに入れてCAファイルを作成する必要がありました。それから私は走った:

 
openssl pkcs12 -export -chain -inkey mykey.key -in mye.crt -name "tomcat" -CAfile intermediate_plus_root.crt -out key_and_cert.p12 
+3

私はこの方法を使用しましたが、エラーが発生しました: "エラーが発行者証明書を取得できませんチェーンを取得します。だから私はネット上で見つけたいくつかのアドバイスに従った。cat PrimaryCA.pem /etc/ssl/certs/ca-certificates.crt SecondaryCA.pem> intermediate_plus_root.crt。上記を再実行して、問題を解決しました。 –

5

それは私のためにAPRを使用して動作します。 http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#SSL_Support_-_APR/Native

<Connector port="3573" protocol="HTTP/1.1" SSLEnabled="true" 
       maxThreads="150" scheme="https" secure="true" 
       clientAuth="false" sslProtocol="TLS" 
       SSLCertificateFile="/my/pem/encoded/certificate/file" 
       SSLCertificateKeyFile="/my/pem/encoded/certificate/private_key" 
       SSLPassword="yourKeyFilePassword" 
       SSLCertificateChainFile="/my/pem/encoded/certificate/authorities/file" 
       /> 
5

(の/ etc/sslの/ certsのにルートと中間本命を保存せずに)いくつかのコメントにを求めたように、より簡単な解決策もあり

最初に必要なすべてのルート証明書と中間証明書のコピーを参照してください。フォルダ内の(この例では、フォルダは、「〜/本命」で、私たちの2つの証明書が「PrimaryCA.pem」と「SecondaryCA.pem」という名前されている):

mkdir ~/certs 
mv PrimaryCA.pem ~/certs/PrimaryCA.pem 
mv SecondaryCA.pem ~/certs/SecondaryCA.pem 

次に「c_rehash」フォルダ:

c_rehash ~/certs 

certsフォルダには、次のスキーム '{hash-value}。{n}'に関する2つの新しいシンボリックリンクが含まれます。{hash-value}は8シンボルハッシュ値、{n}は整数です。それはあなたが使用した.p12を作成し、次のコマンドを続けるためにケースなら「-capath」の代わりに/ etc/sslの/ certsのに証明書をコピーラウンド長い道のりを行くの:

openssl pkcs12 -export -in cert.pem -inkey key.key -out key_and_cert.p12 -chain -CApath ~/certs 

最後に変換しますすでに完全に彼の答えで説明HeinziとしてJKS:

keytool -importkeystore -deststorepass [password] -destkeystore keystore.jks -srckeystore key_and_cert.p12 -srcstoretype PKCS12 -srcstorepass [password] 
0

あなたは中間ファイルへのopenssl CAファイルをコピーしてください。

RHEL concat上のファイルを発行者caファイルに追加します。

/etc/pki/tls/certs/ca-bundle.crt 
関連する問題