0

私はthriftを使用して、Javaで書かれたサーバー(私が書いたものではない)を安全に呼び出すC++クライアントを作成しています(同じthriftファイルを使用してサーバーとクライアントの両方に対して生成されたコード)。SSL通信初心者です。Java サーバー側では、クライアントの公開鍵証明書をサーバーのトラストストア (server-truststore.jks) にインポートして、クライアントの信頼性を検証しました。サーバー側のキーストア (server.jks) から公開証明書をエクスポートし、それをクライアント側で使用して、SSL ハンドシェーク中にサーバー キー証明書を認証しました。SSL 通信のために行ったことをリストすると、次のようになります。

サーバー側 (java):

  1. クライアントの公開鍵証明書をサーバーのトラストストアにエクスポートしました

クレイン側 (C++):

  1. サーバーのキーストアからエクスポートされたサーバーの公開証明書をロードしました
  2. クライアントの公開鍵と秘密鍵を別々にロードしました (これは、クライアントが C++ で記述されているため、Java キー ストアを直接使用できないためです)

使用されるすべての証明書は自己署名されています。

これまでのところ、私は失敗しており、次のエラーが継続的に発生しています。

SSL_connect: certificate verify failed

2 つの質問があります。

  1. SSL 通信に使用したアプローチは正しいですか? そうでない場合、正しいものは何ですか?
  2. このエラーの考えられる理由はありますか?

ありがとうございました。

4

1 に答える 1

0

直接呼び出すキーを確認できるかどうかを確認します: openssl s_client -connect serverIP:Port 。可能であればコードの問題です。そのためには、それについての詳細が必要です。そうでない場合...証明書を使用していません。サーバーから送信されているか、証明書に問題があります。

于 2014-05-26T11:39:55.153 に答える