TCPサーバー上のSslStreamがRemoteCertificateNotAvailableでクライアント証明書を検証できない
-
03-07-2019 - |
質問
この質問は、 SslPolicyError.RemoteCertificateNotAvailable
エラーの解決に関するものです。
SSLStreamを備えたTCPサーバーと、相手側のTCPクライアントを開発しました。
サーバーを認証するには:
sslStream.BeginAuthenticateAsServer
次のものでクライアントを認証します。
sslStream.BeginAuthenticateAsClient
クライアント証明書を Trusted Publishers-Local Machine
からロードしています。
両方が同じマシンで実行されています。
信頼できる発行元ストアではなく、.cerおよび.pfxファイルからクライアント証明書をロードしようとしました。しかし、サーバーのクライアント(リモート)証明書検証コールバックは、 SslPolicyErrors
に RemoteCertificateNotAvailable
エラーがあることを検出して失敗します。
解決
リンクは通過しませんでしたが、この文で見つけることができる問題があります:
"信頼できる発行元からクライアント証明書をロードしました"
クライアント証明書は通常、ユーザーアカウントの個人ストアに存在します。サーバー証明書でも同じです(ただし、「クライアント認証」と「サーバー認証」のように、おそらくそれらには異なる目的OIDが関連付けられています)。信頼できる発行元ストアで利用可能な秘密キー付きの証明書を持っているのは奇妙だと思います。
CertMgr.mscでクライアント証明書またはサーバー証明書をダブルクリックすると、「この証明書には秘密キーがあります」というメッセージが表示されます。下部に向かってメッセージ。
持っていない場合、キーペアの半分しかありません-暗号化と認証には秘密キーが必要です。サーバー証明書にはサーバー側に秘密鍵が必要であり、クライアント証明書にはクライアント側に秘密鍵が必要です。