C#で書かれた、うまく動作しているコミュニケータアプリケーションがあります。今私はサーバーへの安全な接続を実装する必要があります。 SocketとTcpClientオブジェクトをSslStreamに変更しようとしましたが、いくつかのエラーが発生しました。C#SSLセキュアソケット
まず、makecertを使用して.cer証明書を生成しました。 OpenSSL証明書は私のために働いていませんでした。なぜなら彼らは私有鍵を含んでいなかったからです。次の私は、サーバー上の証明書オブジェクトを作成し、SslStreamにそれをバインドされます。クライアント側では
X509Certificate serverCertificate = X509Certificate.CreateFromCertFile("ca.cer");
TcpClient clientSocket = this.tcpListener.AcceptTcpClient();
SslStream ssls = new SslStream(clientSocket.GetStream(), false);
ssls.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls, true);
私はこれをやっている:
TcpClient client = new TcpClient(settings.IP, settings.Port);
sslStream = new SslStream(client.GetStream(), false,
new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
sslStream.AuthenticateAsClient(settings.IP);
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
return false;
}
が、AuthenticateAsClient機能は、例外がスローされます。私はいくつかの他のメソッドパラメータを試しましたが、これのどれも私にとってはうまくいかなかったのです。
誰でも私を手伝ったり、簡単なソケットを安全なものに変更する方法を段階的に説明できますか?明確にするために、SSLは必須条件ではありません。接続を安全にする簡単な方法があれば、それを使うことができます。
編集:例外で メッセージは以下の通りです:
The remote certificate is invalid according to the validation procedure.
申し訳ありません - 「リモート証明書は検証手順に従って無効です。」 –
自己署名証明書の場合。 (ValidateServerCertificate) – KRam