私はthriftを使用して、Javaで書かれたサーバー(私が書いたものではない)を安全に呼び出すC++クライアントを作成しています(同じthriftファイルを使用してサーバーとクライアントの両方に対して生成されたコード)。SSL通信初心者です。Java サーバー側では、クライアントの公開鍵証明書をサーバーのトラストストア (server-truststore.jks) にインポートして、クライアントの信頼性を検証しました。サーバー側のキーストア (server.jks) から公開証明書をエクスポートし、それをクライアント側で使用して、SSL ハンドシェーク中にサーバー キー証明書を認証しました。SSL 通信のために行ったことをリストすると、次のようになります。
サーバー側 (java):
- クライアントの公開鍵証明書をサーバーのトラストストアにエクスポートしました
クレイン側 (C++):
- サーバーのキーストアからエクスポートされたサーバーの公開証明書をロードしました
- クライアントの公開鍵と秘密鍵を別々にロードしました (これは、クライアントが C++ で記述されているため、Java キー ストアを直接使用できないためです)
使用されるすべての証明書は自己署名されています。
これまでのところ、私は失敗しており、次のエラーが継続的に発生しています。
SSL_connect: certificate verify failed
2 つの質問があります。
- SSL 通信に使用したアプローチは正しいですか? そうでない場合、正しいものは何ですか?
- このエラーの考えられる理由はありますか?
ありがとうございました。