繁体   English   中英

SSLStream在服务器身份验证上设置受信任的证书颁发机构

[英]SSLStream set trusted certificate authorities on server authentication

我正在尝试对有证书交换的客户进行身份验证。 我遇到的问题是,openssl客户端拒绝连接尝试,因为身份验证握手中没有证书颁发机构。

对于在Windows Server 2008 R2上运行的实例,这似乎工作正常,但在我的两个开发环境(Windows 10和Windows 7)中,它均失败。 我已经查看并尝试更改一些Windows设置(主要是本地组策略),这些设置可能会禁止添加证书颁发机构,但无法使其正常工作。

那是LocalCertificateSelectionCallback的字符串数组的函数acceptIssuers字段吗?

我还找到了另一个相关的stackoverflow php解决方案 ,但不知道如何将其应用于sslstream类。

我的代码看起来像这样

var _nwStream = new SslStream(client.GetStream(), true,
(sender, certificate, chain, sslPolicyErrors) =>
{
  bool policyErrs = (sslPolicyErrors & (SslPolicyErrors.RemoteCertificateChainErrors | SslPolicyErrors.RemoteCertificateNotAvailable)) != 0;
  if (policyErrs)
  {
    string message = string.Format("Remote Certificate failed for client: {0}, SSL policy errors {1}", client.Client.RemoteEndPoint, sslPolicyErrors);
    return !policyErrs;
},
(sender, targetHost, localCertificates, remoteCertificate, acceptableIssuers) =>
{
  acceptableIssuers = new string[] { _cert.Issuer };
  return _cert;
});

_nwStream.AuthenticateAsServer(_cert, true, System.Security.Authentication.SslProtocols.Tls, true);

任何帮助将不胜感激-谢谢!

好吧,我不知道为什么它没有更快出现。 HKEY_LOCAL_MACHINE \\ System \\ CurrentControlSet \\ Control \\ SecurityProviders \\ SCHANNEL上有一个名为SendTrustedIssuerList的注册表项,该注册表项设置为0,将其更改为1可解决此问题。 在Windows Server实例上,此标志可能默认情况下设置为1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM