自签名证书:私钥问题

时间:2017-03-21 16:51:09

标签: c# ssl x509certificate2 certenroll

通过SslStream实现TLS加密我正在使用自签名证书。 我遇到了奇怪的"没有常见的算法"从较旧的Win2003计算机连接的客户端的错误。

阅读this thread后,我发现了以下内容:

如果我更改证书生成过程(更具体地说:私钥生成部分),那些错误就会消失:

旧:

     var privateKey = new CX509PrivateKey();
     privateKey.ProviderName = "Microsoft Base Cryptographic Provider v1.0";
     privateKey.MachineContext = true;
     privateKey.Length = 2048;
     privateKey.KeySpec = X509KeySpec.XCN_AT_SIGNATURE
     privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG;
     privateKey.Create();

新:

     var privateKey = new CX509PrivateKey();
     privateKey.ProviderName = "Microsoft Base Cryptographic Provider v1.0";
     privateKey.MachineContext = true;
     privateKey.Length = 1024;
     privateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE; 
     privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG;
     privateKey.Create();

我的问题(可能听起来很愚蠢,对不起;我对TLS& co来说还是新手):

  • 哪种算法使用此keySpec值在私钥上进行中继?我能看到哪个算法被SslStream带走了吗?
  • 为什么我必须将密钥长度减少到1024?上面的任何值都会在调用Create()时发生异常。
  • 我是否因这些变化而面临安全隐患?
  • 任何有关修理Win2K03机器的建议也欢迎......

1 个答案:

答案 0 :(得分:1)

Microsoft Base Cryptographic Provider v1.0是加密提供商中最受限制的。对于AT_EXCHANGE,它被限制为1024位RSA,每https://msdn.microsoft.com/en-us/library/windows/desktop/bb931357(v=vs.85).aspx

您的TLS错误可能来自希望在AT_EXCHANGE模式下使用RSA密钥的SChannel库,即使在使用RSA签名的密码套件中也是如此,而不是RSA加密,因为您的两个文件在keyspec和值上都不同。

Microsoft Enhanced RSA and AES Cryptographic Provider是最新的(在XP SP3中添加)CSP,如果你更改为你应该能够使RSA AT_EXCHANGE密钥长达16384(尽管它需要花费数小时才能完成,所以你可能想坚持你的2048年。