同じマシン上の同じ証明書を持つ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証明書チェーン