PEM ファイルが提供されており、一部の API 呼び出しのために C++ サーバーに接続する SSL ソケットを確立するために必要であると言われました。PEMファイルを読み込んで接続する方法を知っている人はいますか? パラフレーズのパスワードも渡されました。
2 に答える
PEM ファイルは、サーバーへのログインに使用するクライアント証明書のようです。それがクライアント証明書であり、そのように聞こえる場合は、接続を確立するためにサーバー証明書を検証する際にも使用する ca cert ファイルが必要になる可能性があります。
CA 証明書はトラストストアに、クライアント証明書はキーストアに入れる必要があります。Java では、これらは両方とも JKS になります (ただし、PKCS12 のサポートは制限されています)。JRE と各ユーザーのデフォルトのキーストア/トラストストアの場所があります。以下の例のように、コード内でこれらのファイルの外部の場所を指定することもできます。commons-ssl ライブラリは、JKS を必要とせずに PEM を直接サポートできるようですが、私は使用していません。
Java でのこれらのキーストアのデフォルトのパスフレーズは、引用符なしの「changeit」です。
このページは、PEM をキーストア/トラストストアに読み込む必要があることを示しています。別の例を次に示します。
トラストストアとキーストアを適切に設定したら、次のJSSE システム プロパティを JVMに渡す必要があります。
javax.net.ssl.keyStore
javax.net.ssl.keyStoreType
javax.net.ssl.keyStorePassword
javax.net.ssl.trustStore
javax.net.ssl.trustStoreType
javax.net.ssl.trustStorePassword
それらを -D パラメータとして JRE に指定することも、以下の例のようにプログラムで指定することもできます。
それが終わったら、ソケットを作成するcommons-ssl の例を次に示します。また、SSLSocketの Java API もここにあります。また、Apache Commons を使用しない例も示します。
SSLを処理するライブラリが必要です。John Ellinwoodが指摘したように、一部のフレームワーク(Java 2 SEなど)はこれらの組み込みを提供しますが、他のフレームワークではサードパーティのライブラリを使用する必要があります。
C開発者はopensslを直接使用することがよくありますが、簡単とは言えません。C++を使用する場合、簡単に陥りやすい「落とし穴」がいくつかあります。
QTのネットワークライブラリやPocoNetSSLなど、SSLをサポートするC++ネットワークライブラリを使用することをお勧めします。チュートリアルのドキュメントについてはこちらを、APIのドキュメントについてはこちらをご覧ください。PEMファイルを直接取得するinitializeClientを確認することをお勧めします。