現在、私は、プレイアプリケーションをデータベースと暗号化されたSSLで通信できるようにしようとしています。 mysqlの自己署名証明書とCAを作成しました。それに問題は私がJAVA_OPTSにこのCAを追加するとき、私はSSLを介して他のサイトと通信しようとしないプレイフレームワーク内の複数のトラストストア - jvm
-Djavax.net.ssl.trustStore=/app/path/conf/truststore
すべては私のアプリケーションまでうまく行く、アプリケーションは暗号化されたDBサーバと通信することができ、通常はありません:
java.net.ConnectException: General SSLEngine problem to https://api.twitter.com/1/statuses/oembed.json?<meh>
[...]
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
[...]
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
[...]
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[...]
誤差はかなり明白です:私のトラストストアにはTwitterの証明書に署名したCAが含まれていないため、さえずりのSSL証明書は、確認することができません。 IIRC JVM用に複数の「javax.net.ssl.trustStore」パラメータを追加することはできません。そのため、CAをプレーフレームワークに挿入する必要があります。運のために、プレイフレームワークは、SSLをサポートしており、私は複数のトラストストアを追加することができますドキュメントに関する:https://www.playframework.com/documentation/2.4.x/WsSSL 私は、SSL用の設定ファイル作成:
play.ws.ssl {
trustManager = {
stores = [
{ path: /path/to/truststore, type: "JKS", password = "<whatever is it" }
{ path: ${java.home}/lib/security/cacerts } # Default trust store
]
}
をしかし、私は、サーバーを起動したとき、私は、次のエラーメッセージが表示されました:
Oops, cannot start the server.
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
今、私は立ち往生しています。私はJVM用のトラストストアを挿入することができますが、これを行うと、他のSSL対応ホストと通信することはできません。証明書はありませんが、プレイストラクチャのトラストストアを追加しようとすると、証明書。 これをどうにかして解決する方法はありますか?私はシステム全体のcacertファイル(javaで使用されている)と私のトラストストアを取ってから、keytoolでそれらをマージして、これを解決すると思うが、これは最善の方法ではない - もしできれば、自分の署名した証明書をアプリケーションの横にまとめてください。