要通过 SslStream 实现 TLS 加密,我使用的是自签名证书。对于从较旧的 Win2003 机器连接的客户端,我遇到了奇怪的“无通用算法”错误。
阅读此主题后,我发现了以下内容:
如果我更改证书生成程序(更具体地说:私钥生成部分),这些错误就会消失:
老的:
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 机器的建议...