2016-09-29 15 views
0

apache2のhttpdから(Javaベースの)vert.x 3サーバーに移行する必要があります。 apache2のhttpdのが成功のssl.confには、次の3つの証明書/キーファイル(短縮パス)を使用して設定することができますsslを使用する場合、apache2からvertx 3への移行

<VirtualHost> 
    ... 

    SSLCertificateFile certificate.cer 
    SSLCertificateKeyFile privatekey.key 
    SSLCertificateChainFile intermediate.cer 

    ... 
</VirtualHost> 

ブラウザは文句なしのHTTPS接続を受け入れました。

vert.x 3のキーストアを作成し、それを実行した後、ブラウザが私に語った:まだ

www.mydomain.com uses an invalid security certificate. 
The certificate is not trusted because the issuer certificate 
is unknown. The server might not be sending the appropriate 
intermediate certificates. 
An additional root certificate may need to be imported. 
Error code: SEC_ERROR_UNKNOWN_ISSUER 

、ブラウザは、右のサーバ証明書と中間証明書を受け取るように思われます。

よく動作するapache2 httpdの設定で、(厳しいGeoTrustルート証明書の)ルート証明書がどのように使用されているかを知るにはどうすればよいですか? これをjavaキーストアに含める必要がありますか?

「はい」の場合、httpdは正しいルート証明書をどのように見つけるのですか?

.../mozillaフォルダは、サーバーのルート証明書を取得するのに適していますか(ブラウザで使用する証明書の場所だと思いますが)?

代わりの説明を除外する:vertxには、sslの機能に既知のバグがありますか?

+0

コードでSSLを構成する方法の簡単なコード例を提供できる場合は、この問題を理解することが簡単になります。 –

+0

「コード」とはどういう意味ですか? Vert.x 3がJavaキーストア(。新しいHttpServerOptions() .setSsl(真) .setKeyStoreOptions( 新しいJksOptions() .setPath( "たkeystore.jks") .setPassword( "..."):JKS)は、キーストアとパスワードを取ります ) ); - またはJavaキーストアを生成するためにopensslとkeytoolを使用するbashスクリプト "code"を意味しましたか? < - ブラウザがエラーコード:SEC_ERROR_UNKNOWN_ISSUERを出すという例外を除いて、(中間、証明書およびキーはo.kです)動作しているようです。 – Michael

+1

キーストアまたはopenssl証明書を使用していたかどうかを知りたいと思っていました。たとえば、既存のopenssl証明書を次のように使用することができました: 'settl(。 (サーバー鍵.pem ").setCertPath(" server-cert.pem ") ));' –

答えて

1

Vert.x SSL構成は、Java keystoresまたはOpenSSLのいずれかを使用して行うことができます。どちらも長所と短所がありますが、ApacheからVert.xに移行する場合、最短パスはOpenSSLエンジンを使用します。

プロジェクトで1つの余分の依存関係が必要になりますOpenSSLエンジンを使用するには:

<dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-tcnative-boringssl-static</artifactId> 
    <version>1.1.33.Fork21</version> 
</dependency> 

これはNettyはOpenSSLを使用するか、より正確BoringSSLため、既存の証明書を使用できるようになります。

new HttpServerOptions() 
    .setSsl(true) 
    .setPemKeyCertOptions(
    new PemKeyCertOptions() 
     .setKeyPath("privatekey.key") 
     .setCertPath("certificate.cer"))); 

キーストアのオプションの設定は、秘密鍵とそのプライバシーが強化された電子メールに基づいて証明書(PEM)ファイルを期待:ロード証明書は、このようHttpOptionsオブジェクトを作成することによって行われます。

鍵ファイルは、例えば、PEMブロックに包まれPKCS8形式で非暗号化された秘密鍵が含まれている必要があります。

-----BEGIN PRIVATE KEY----- 
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a 
... 
K5xBhtm1AhdnZjx5KfW3BecE 
-----END PRIVATE KEY----- 

証明書ファイルがために、PEMブロックに包まれたX.509証明書が含まれている必要があります例:

-----BEGIN CERTIFICATE----- 
MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV 
... 
+tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA== 
-----END CERTIFICATE----- 

あり、証明書チェーンのための本当のサポートはありませんが(あなたが公共の対向サイトを持っている場合)あなたが訪問し、それを回避することができます:https://whatsmychaincert.com/と正しいチェーンをダウンロードする(キープ未確認の「ルート証明書を含めます」) 。そのダウンロードはcertificate.cerになります。

+0

私の場合、stllは動作しません。私はエラーメッセージが表示されます: "失われた-----プライベートキーを始める-----デリミタ"、私のキーは----- BEGIN RSAプライベートキー-----で始まります。私がRSAをキャンセルすると、それはうまくいかない。しかし、これらの鍵はapache2で正常に動作します。 – Michael

+0

欠けている部分は次のとおりです。$ openssl pkcs8 -topk8 -in privatekey.pem -inform pem -out openssl_key_pk8.pem -outform pem -nocrypt。そして、 openssl_key_pk8.pemを上記の手順の一部にすることができます。 – Michael

+0

openjdkにはすべての強力な暗号化アルゴリズムが付属していないため、oracle jdkで実行しようとしていることを確認してください。 –

関連する問題