サーバー A とクライアント B があるとします。
サーバー A が TLS 相互認証メカニズムを使用するように構成するには、クライアント B とその逆を認証するために、サーバーにキーペアと「参照」が必要です。
ここで、テストのために、次のコマンドで serverA を使用して証明書に署名するための CA (認証機関) を作成できます。
[1] ~# openssl genrsa -out caServerA.key 1024
[2] ~# openssl req -new -key caServerA.key -out caServerA.csr
[3] ~# openssl ca -selfsign -keyfile caServerA.key -in caServer.csr -out caServerA.crt
サーバー A の鍵ペアを生成し、以前に作成した CA で署名します。
[1] ~# openssl genrsa -out serverA.key 1024
[2] ~# openssl req -new -key serverA.key -out serverA.csr
[3] ~# openssl ca -keyfile caServerA.key -cert caServerA.csr -in serverA.csr -out serverA.crt
クライアント側でも同じプロセスを繰り返します。最後に、clientB.crt、clientB.key、caClientB.crt のようなものが必要です。
サーバーがapache2であると仮定すると、httpsスタッフを次のように構成する必要があります。
[....]
SSLEngine on
SSLCertificateFile [path_to_your_certificate]/serverA.crt
SSLCertificateKeyFile [path_to_your_certificate]/serverA.key
# this because you have to trust all clients that have certificates signed by caClientB
SSLCACertificateFile [path_to_your_certificate]/caClientB.crt
# this will force server to verify client's identity/certificate
SSLVerifyClient require
[....]
サーバーを再起動すると、クライアントを認証する準備が整います。
テストの場合は、Web ブラウザーを使用してサーバーに接続する方が簡単です。ただし、それを行う前に、次のコマンドを使用して鍵ペアを PKCS12 形式でエクスポートする必要があります。
openssl pkcs12 -export -in clientB.crt -inkey clientB.key -out clientB.pkcs12
これで、このファイルをお好みのブラウザの「キー管理システム」にインポートできます。サーバーに接続すると、これが機能します。
デバッグ モードで Loglevel を有効にして、詳細を確認することもできます。
それが役に立てば幸い ...