Opensslを使用して証明書を生成し、それをクライアントのマシンに配置しましたが、その証明書を使用してサーバーに接続しようとすると、サーバーから返された件名にエラーが表示されます。
これが私がやったことです。
1)opensslを使用してテスト接続を行い、サーバーに受け入れ可能なクライアント証明書CA名を確認します。クライアントマシンからサーバーに次のコマンドを発行します。
openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -prexit
そして私が返すものの一部は以下の通りです:
Acceptable client certificate CA names
/C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/[email protected]
/C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/[email protected]
2)SSLクライアント認証に関するサーバーのApache構成ファイルの内容は次のとおりです。
SSLCACertificatePath /etc/Apache2/certs
SSLVerifyClient require
SSLVerifyDepth 10
3)mypos.pemとmypos.keyを使用して「client.pem」と呼ばれる自己署名クライアント証明書を生成したので、次のコマンドを実行すると、
openssl x509 -in client.pem -noout -issuer -subject -serial
これが返されるものです:
issuer= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/[email protected]
subject= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=mlR::mlR/[email protected]
serial=0E
(mypos.pemは/ etc/Apache2/certs /にあり、mypos.keyは/ etc/Apache2/certs/private /に保存されていることに注意してください)
4)client.pemをクライアントマシンに配置し、クライアントマシンで次のコマンドを実行します。
openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem
そして私はこのエラーを受け取ります:
CONNECTED(00000003)
OCSP response: no response sent
depth=1 /C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/[email protected]
verify error:num=19:self signed certificate in certificate chain
verify return:0
574:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s3_pkt.c:1102:SSL alert number 48
574:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s23_lib.c:182:
私は自分が間違ったことに本当に困惑しています。私はこのエラーをかなり検索しましたが、クライアント証明書の発行CAはサーバーによって信頼されていないと人々が言っていることがわかりましたが、クライアント証明書の発行者を見ると、サーバーから返された承認済みCA。
誰か助けてもらえますか?
前もって感謝します。
わかりました、私は最終的に問題が何であるかを見つけました、そして誰かがそのエラーメッセージでも行き詰まった場合に備えてそれを共有したいと思います。
Apacheの構成ファイルには、CAについて話すときに次の行があります。
# Set the CA certificate verification path where to find CA
# certificates for client authentication or alternatively one
# huge file containing all of them (file must be PEM encoded)
# Note: Inside SSLCACertificatePath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
つまり、SSLCACertificatePathが指すこのディレクトリ内のすべての証明書ファイルは、シンボリックリンクを使用する必要があります。さらに、最も重要なこととして、各シンボリックリンクの名前は、各証明書のサブジェクトハッシュ値でなければなりません。次のコマンドを実行して、CA証明書のハッシュ値を確認できます。
openssl x509 -subject_hash -in *cacert.pem*
したがって、ハッシュ値が0434423bの場合、SSLCACertificatePathが指すディレクトリに、ディレクトリ内の証明書を指す2つのシンボリックリンクを作成する必要があります。
0434423b -> /etc/Apache2/certs/mypos.pem
0434423b.0 -> /etc/Apache2/certs/mypos.pem
これで問題が解決するはずです。もちろん、SSLCACertificateFileを使用したことがあれば、それほど問題は発生しなかったと思います。
SSLCACertificatePathの説明はここにあります:
-CApathディレクトリの下を見てください
「Sudo update-ca-certificates --fresh」コマンドは、各証明書のサブジェクトハッシュ値から証明書へのシンボリックリンクを自動的に生成することがわかりました。
こんにちは、次のコマンドを実行してみましたか、
openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem -verify 1 -showcerts
verify 1に注意してください。それはsslにどれだけ深く行く必要があるかを伝えます、そして私はこれがあなたがあなたのApache設定で持っている問題であるかもしれないと思います。 Apache構成を設定してみてください。
SSLVerifyDepth 1
乾杯、デクスター