2017-03-21 178 views
0

要通过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 &共):

  • 哪些算法中继与此keySpec值私钥?我可以在哪里看到SslStream采取了哪种算法?
  • 为什么我必须将密钥长度减少到1024?上述任何值在调用Create()时都会导致发生异常。
  • 我是否会因这些变化而承担安全风险?
  • 指的固定Win2K03机的任何建议,也欢迎...

回答

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加密,因为您的两个文件在keypec和value中都有所不同。

Microsoft Enhanced RSA and AES Cryptographic Provider是最新的(在XP SP3中添加的)CSP,如果你改变你应该能够使RSA AT_EXCHANGE键达到16384的长度(尽管这需要几个小时才能完成,所以你可能想要坚持你的2048)。