同じマシン上の同じ証明書を持つ2つのサービス間の相互認証
Nov 26 2020
service A
いくつかのRESTAPIが公開されている単純なSpringBootサービス()があります。httpsサポートを追加するためservice B
に、同じボックスにある別のサービス()に発行されたものと同じ証明書を使用しました。これが私のapplication.propertiesファイルです
server.ssl.enabled=true
server.ssl.client-auth=need
server.ssl.key-store=keystore.jks
server.ssl.key-store-password=password
server.ssl.key-store-type=JKS
server.ssl.trust-store-password=password
server.ssl.trust-store=keystore.jks
server.ssl.trust-store-type=JKS
これは、への接続がでservice A
はないクライアントから行われている場合に機能しているようservice B
です。クライアント証明書が検証されるように、サービス間の相互認証を有効にしました。からB
にリクエストを送信するとA
、エラーが発生します
javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate
at sun.security.ssl.Alert.createSSLException(Alert.java:131)
at sun.security.ssl.Alert.createSSLException(Alert.java:117)
sslデバッグを有効にした後、このエラーがこれを引き起こしていることがわかりました
upcoming handshake states: server finished[20]
*** Certificate chain
<Empty>
***
https-jsse-nio-8090-exec-4, fatal error: 42: null cert chain
キーストアとトラストストアが正しく設定されていることを確認して再確認しましたが、うまくいきませんでした。同じ証明書を持つサーバーとクライアントでこれを機能させる方法はありますか?私がこれに1週間苦労してきたので、(同じ証明書を使用して)それを機能させる方法についての指針に感謝します。
回答
1 SusanMustafa Nov 26 2020 at 03:36
JKSにはチェーン全体が含まれていますか?内部を見ると、ルート証明書までのチェーン全体がありますか?
エラーは、チェーンが見つからないことを示しています。あなたの証明書はおそらく自己署名ですか?または、JKSに完全なチェーンがありません。
同様のStackoverflowの質問を参照してください:CamelJettyWebSocketServer、致命的なエラー:42:null証明書チェーン