自签名证书:私钥问题

Self signed certificate: Private key questions

为了通过 SslStream 实施 TLS 加密,我使用的是自签名证书。 对于从旧 Win2003 计算机连接的客户端,我遇到了奇怪的 "no common algorithm" 错误。

阅读 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 还很陌生):

Microsoft Base Cryptographic Provider v1.0 是最受限制的加密提供程序。对于 AT_EXCHANGE,根据 https://msdn.microsoft.com/en-us/library/windows/desktop/bb931357(v=vs.85).aspx.

,它仅限于 1024 位 RSA

你的 TLS 错误可能来自 SChannel 库想要在 AT_EXCHANGE 模式下使用 RSA 密钥,即使在使用 RSA 签名但不是 RSA 加密的密码套件上也是如此,因为你的两个文件在 keyspec 和值。

Microsoft Enhanced RSA and AES Cryptographic Provider 是最新的(在 XP SP3 中添加的)CSP,如果您更改为它,您应该能够制作最长 16384 的 RSA AT_EXCHANGE 密钥(尽管这需要数小时这样做,所以你可能想坚持使用 2048)。