相关疑难解决方法(0)

请求已中止:无法创建SSL/TLS安全通道

WebRequest由于此错误消息,我们无法连接到HTTPS服务器:

The request was aborted: Could not create SSL/TLS secure channel.

我们知道服务器没有使用路径的有效HTTPS证书,但是为了绕过这个问题,我们使用以下代码,我们从另一个StackOverflow帖子中获取:

private void Somewhere() {
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}

private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
   return true;
}
Run Code Online (Sandbox Code Playgroud)

问题是服务器永远不会验证证书并因上述错误而失败.有谁知道我该怎么办?


我应该提到一位同事和我几周前进行了测试,并且它与我上面写的内容类似.我们发现的唯一"主要差异"是我使用的是Windows 7并且他使用的是Windows XP.这有什么改变吗?

c# asp.net httpwebrequest windows-7 windows-8

349
推荐指数
29
解决办法
63万
查看次数

SSL Webservice:无法创建SSL/TLS安全通道

我的C#.net应用程序正在使用HTTPS Web服务.由于证书现在即将到期,我正在尝试使用我已经给出的新版本更新它(我使用javasdks的keytool转换为.p12的.jks文件).我认为这很容易,因为我知道该怎么做,但它不会合作.

到目前为止我做了什么:

  • 导入的证书到CURRENT_USER\Personal
  • 导入的证书到LOCAL_MACHINE\Personal
  • 给定正确的用户(apppoolidentity)通过winhttpcertcfg工具访问证书的私钥.下面是证书的权限列表.
  • 使用findprivatekey工具,我还找到了实际的密钥文件,并给出了apppoolidentity访问权限.(无奈之下).

    C:\ Program Files(x86)\ Windows资源工具包\工具> winhttpcertcfg -l -c LOCAL_MACHINE\My -s"9000 - Blabla"Microsoft(R)WinHTTP证书配置工具版权所有(C)Microsoft Corporation 2001.

    匹配证书:CN = 9000 - Blabla C = NO L ="c/o Blabla AS,Blablaaddress"OU = 957839827 OID.1.2.240.111111.1.9.8 = 12345678 OID.1.2.240.111111.1.9.2 = Blabla Test O = BlaBla AS OU =多次允许

    可以访问私钥的其他帐户和组包括:BUILTIN\Administrators NT AUTHORITY\SYSTEM IIS APPPOOL\ASP.NET v4.0 BUILTIN\Users NT AUTHORITY\NETWORK SERVICE DIGITROLLDMZ\IIS_WPG

我正在访问的网址看起来像这样:

https://test.blabla.com/blabla-5.0/services/Blabla?wsdl
Run Code Online (Sandbox Code Playgroud)

...如果我从服务器网络浏览器访问它,我会选择证书,我选择新的证书,它说它没关系,绿色和SSL按顺序和所有,但我的应用程序代码,如下所示:

public static blabla.service.NettforhandlerService getNettforhandlerService(string applicationPath) 
    {
    blabla.service.NettforhandlerService service = new blabla.service.NettforhandlerService();
    if (System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"] != null && System.Configuration.ConfigurationManager.AppSettings["CertificateSerialNumber"].Length > 0) …
Run Code Online (Sandbox Code Playgroud)

c# ssl https

10
推荐指数
2
解决办法
5万
查看次数

PrivateKey信任本地计算机"受信任的根"证书的权限

我有一个证书,必须导入证书/受信任的根证书颁发机构并具有相应的私钥.

要从代码实际访问密钥,您需要设置私钥权限以授予对特定IIS应用程序池的完全访问权限.我完全理解,但问题是这只能在个人证书上设置,而不是在受信任的根证书上设置.

我尝试将相同的证书添加到个人商店,以下代码不会破坏:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);

foreach (X509Certificate2 cert in store.Certificates)
{
    if (cert.HasPrivateKey)
    {
        // access private key here
    }
}

store.Close();
Run Code Online (Sandbox Code Playgroud)

如果我更改StoreName.Root为,在个人存储中设置证书的权限StoreName.My.我可以在那里访问它.但是我无法在root中访问它.它只是说:

键集不存在

有什么建议?

附加信息

如果我将我的应用程序池标识设置为本地系统(它对我的计算机具有完全权限),我可以成功访问私钥.因此,主要问题是如何设置应用程序池标识的权限以访问受信任的根存储中的证书的私钥.

为什么信任root商店而非个人?
我有一个预先构建的程序集,可以在这个特定的商店中访问此证书,因此只需将证书放在个人存储中就行不通.这就是为什么在受信任的根证书的私钥上设置信任权限是必要的.

iis-7 certificate windows-7 windows-server-2008-r2 private-key

7
推荐指数
1
解决办法
2万
查看次数

带有从文件加载的客户端证书的 HttpClient

我想向在 IIS 服务器下运行的客户端 .NET 应用程序添加相互身份验证(它是一个调用另一个 Web 服务的 Web 服务)。客户端应用程序从文件加载客户端证书,并且在我的开发计算机上使用以下代码可以正常工作(我尝试使用 .NET 4.6.2 的 Windows 7 和 Windows 10):

var handler = new WebRequestHandler();
var certificate = new X509Certificate2(clientCertPath); -- PFX file with client cert and private key 
handler.ClientCertificates.Add(certificate);
handler.AuthenticationLevel = AuthenticationLevel.MutualAuthRequired;
client = new HttpClient(handler);
Run Code Online (Sandbox Code Playgroud)

但是,当将此代码部署到生产 Windows 2016 Server 计算机时,应用程序会抛出异常The request was aborted: Could not create SSL/TLS secure channel.

我启用了跟踪,System.Net这是我在日志中看到的

SecureChannel#66407304 - Certificate is of type X509Certificate2 and contains the private key.
AcquireCredentialsHandle(package = Microsoft Unified Security Protocol …
Run Code Online (Sandbox Code Playgroud)

c# iis client-certificates dotnet-httpclient mutual-authentication

5
推荐指数
1
解决办法
1万
查看次数

将IdentityServer 4部署到Azure VM时找不到证书

我在将IdentityServer 4(ASP.NET Core 1.1)部署到Azure VM(Windows Server 2012 R2)时遇到此证书问题.

crit: IdentityServer4.Hosting.IdentityServerMiddleware[0]
      Unhandled exception: Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: The system cannot find the file specified
         at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider, CngKeyOpenOptions openOptions)
         at System.Security.Cryptography.CngKey.Open(String keyName, CngProvider provider)
         at Internal.Cryptography.Pal.CertificatePal.GetPrivateKey[T](Func`2 createCsp, Func`2 createCng)
         at Internal.Cryptography.Pal.CertificatePal.GetRSAPrivateKey()
Run Code Online (Sandbox Code Playgroud)

这将适用于本地开发计算机,我无法弄明白为什么.我在VM上的My(本地计算机)存储上安装了证书.

任何人都可以帮助这个.谢谢.

azure .net-core identityserver4

5
推荐指数
2
解决办法
2597
查看次数

证书:找不到用于解密的证书和私钥签名时出错

我在公司工作,为开发人员提供许多服务器和PC。服务器是win2003,PC开发人员是Windows XP。

在预生产环境中的名为Winiis01的服务器Win2003中,公司中的其他人使用任何其他用户(domainCompany \ adminsystems)安装客户端证书,以登录服务器preiis01。

任何管理员都使用用户“ domainCompany \ adminsystems”登录服务器preiis01(使用Windows XP的远程服务器终端服务器)。

管理员用户是domainCompany \ adminsystems“,它将安装证书。

管理员用户按以下方式安装它:

会话登录(例如“ domainCompany \ adminsystems”)证书是PFX文件。请安装PFX并使用向导。密钥私有不检查导出。输入密码并安装。

有一个应用程序Web,其AppPool身份为:网络服务帐户。

Web服务器是IIS 6.0。

在preiis01中,

该管理员用户执行mmc->管理单元->本地计算机证书。在节点->个人->证书中,他看到了客户端证书:

颁发给ENTIDAD COMPANY INSURE SA-CIF A93-NOMBRE SURNAME1 NAME1

由FNMT Clase 2 CA发布

在证书的属性中,指纹:“ 93 bc a4 ad 58 c9 3c af 8b eb 0b 2f 86 c7 9d 81 70 a6 c4 13”

该管理员用户执行以下命令:

winhttpcertcfg.exe LOCAL_MACHINE \ My -s“ ENTIDAD COMPANY INSURE SA-CIF A93-NOMBRE SURNAME1 NAME1” -g -a“网络服务”

结果是:

配套证书:

CN = ENTIDAD COMPANY INSURE SA-CIF A93-NOMBRE SURNAME1 …

account iis-6 windows-server-2003 x509certificate

4
推荐指数
1
解决办法
2万
查看次数

在 LocalMachine 存储或 CurrentUser 存储中找不到证书

我已经ssl cert在用户 PC 中安装了。而且,我还在Trusted Root Certification Authorities.本地计算机下导入了证书。我正在尝试消耗web servcie. 在我的代码中,我附上了证书,如下所示。

webservice.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certPath));
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。

在 LocalMachine 存储或 CurrentUser 存储中找不到证书

可能是什么问题?我正在使用 .Net Framework 2.0。所以,不能使用WCF。谢谢。

c# .net-2.0 winforms

3
推荐指数
1
解决办法
1万
查看次数

证书私钥在IIS Web服务器下引发CryptographicException

在我的ASP.NET应用程序中,我正在从证书存储区加载证书:

var myCert = CertificateUtils.GetCertificate("thumbprint");
Run Code Online (Sandbox Code Playgroud)

此证书包含一个密钥对,用于解密加密的应用程序设置.

证书安装在本地计算机下的个人证书存储中.当应用程序在IIS Express下运行时,它运行良好.但是如果我在完整的IIS Web服务器下执行它,则该实例缺少私钥. myCert

PrivateKey领域myCert对象包含了异常:

'myCert.PrivateKey' threw an exception of type 'System.Security.Cryptography.CryptographicException'
Run Code Online (Sandbox Code Playgroud)

我已检查过myCert对象的其他字段是否包含相同的值(例如,证书序列号,指纹或过期),因此它似乎在IISIIS Express下获得相同的证书.在完整IIS的情况下,仅缺少私钥.

我唯一改变的是项目属性中的本地开发服务器("使用IIE Express"/"使用IIS Web服务器").它在两种情况下都在Azure Emulator Express中运行.

有没有人有想法,为什么会这样?

c# asp.net iis iis-express

3
推荐指数
1
解决办法
5671
查看次数

为什么我的应用用户找不到始终加密的证书?

使用 SQL Server 2017 我按照这篇文章应用了 Always Encrypt 技术:https : //www.codeproject.com/Articles/1110564/Always-Encrypted-feature-in-SQL-Server 简单地说:

  1. 创建列主密钥。
  2. 创建列加密密钥。
  3. 使用后者加密列。

用于步骤 1.的证书是使用向导生成的并保存在:
密钥库: Windows Certificate Store - Local Machine

我创建了一个非常简单的控制台应用程序,它使用 EF 尝试从我对列进行加密的表中获取数据。

我在连接字符串中添加了这个:column encryption setting=Enabled.

当我尝试获取数据时:

    using (MyEntities en = new MyEntities())
    {
        var x = en.TableHasColEnc.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

'未能解密列'X'。无法使用密钥存储提供程序解密列加密密钥:“MSSQL_CERTIFICATE_STORE”。加密列加密密钥的最后 10 个字节是:'XX-XX-XX-XX-XX-XX-XX-XX-XX-XX'。在证书位置“LocalMachine”的证书存储“My”中找不到带有指纹“...”的证书。验证数据库中列主密钥定义中的证书路径是否正确,并且证书已正确导入到证书位置/存储中。参数名称:masterKeyPath'

我了解到运行此应用程序的用户无法访问该位置以获取证书,但为什么呢?
如果我以管理员身份运行该应用程序,它将正常工作。

我打开mmc并检查Certificates (Local Computer)并找到了在步骤 1 中使用的证书它看起来在本地机器中正确,而不是当前用户。

为什么我会收到此错误以及如何解决?

sql-server always-encrypted

1
推荐指数
1
解决办法
2254
查看次数