我有一个奇怪的问题,SslStream.AuthenticateAsClient() 抛出以下异常:
只有当客户端需要Tls12时才会发生这种情况:
System.Security.Authentication.AuthenticationException : A call to SSPI failed, see inner exception.
----> System.ComponentModel.Win32Exception : The token supplied to the function is invalid
只有当客户端需要Tls12时才会发生这种情况:
SslStream.AuthenticateAsClient(..., ..., SslProtocols.Tls12);
对于 Ssl3、Tls11 和 Tls,代码可以正常工作。
服务器证书是自签名的且“旧”。它使用 md5RSA 签名和 1024 位密钥。最初我认为这是问题所在,因为重新生成证书会使异常消失(我尝试了 SHA1 和 SHA512 - 都没有问题)。
然而,令我惊讶的是,FileZilla 客户端能够使用这个“旧”的 md5RSA 签名证书并使用 TLS 1.2 连接到该服务器:
以下是该证书:
-----BEGIN CERTIFICATE-----
MIICejCCAeOgAwIBAgIQzbvZdHHAV49D7R8OE2mEaDANBgkqhkiG9w0BAQQFADBA
MSswKQYJKoZIhvcNAQkBFhxlbWFpbEBpbi10aGUtY2VydGlmaWNhdGUuY29tMREw
DwYDVQQDEwhKb2huIERvZTAeFw0xMTAxMjAyMDAzNDFaFw0zOTEyMzEyMzU5NTla
MEAxKzApBgkqhkiG9w0BCQEWHGVtYWlsQGluLXRoZS1jZXJ0aWZpY2F0ZS5jb20x
ETAPBgNVBAMTCEpvaG4gRG9lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0
s5RAKYdw2AYk3t0oH5jDo6RQRRfabkOLfKvR8kOiYbqjtgblx7JhSZJHX/r6KLoc
hGgYkQPOSKnl8TdgEkzPxWHECV/iMdOxTsTv2P//ZM2INjb4H8JjDS16PYFwHP3w
/9RU6PjppK+mPdWP1pezBzebSM0QQwpmXlSmfe2ULQIDAQABo3UwczBxBgNVHQEE
ajBogBA4WNgTvhkmRD8DhHeRvAJcoUIwQDErMCkGCSqGSIb3DQEJARYcZW1haWxA
aW4tdGhlLWNlcnRpZmljYXRlLmNvbTERMA8GA1UEAxMISm9obiBEb2WCEM272XRx
wFePQ+0fDhNphGgwDQYJKoZIhvcNAQEEBQADgYEAFX6MM/E97hC6t1TAFBmM3tWr
fQ2cB0LFCe6J0I8phKQecpSYCkMdvaHdsT+sdzXNW4bgL064r731r8l/47VgfgIR
oRmsQYnwJ55nqZpEW2zL3vioedWiCVto8X9/dVC8jqPpcmMP5NWBHh88o7nkPBxe
C8iucrQvHnjYwaz1o/M=
-----END CERTIFICATE-----
我的问题是:
为什么
SslStream.AuthenticateAsClient
会抛出异常,而Filezilla客户端却能连接?在使用TLS 1.2时,是否存在任何.NET/Windows 10/CryptoAPI证书限制?
如果存在限制,为什么FileZilla没有强制执行它们?
为什么错误信息如此晦涩:“提供给函数的令牌无效”?