TLS 1.2 - 提供给该函数的令牌无效

时间:2016-12-02 18:46:44

标签: .net ssl cryptography tls1.2 cryptoapi

我有这个奇怪的问题,SslStream.AuthenticateAsClient()抛出以下异常:

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 连接到此服务器:

TLS 1.2 with old cert

以下是证书:

-----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-----

我的问题是:

  1. 为什么SslStream.AuthenticateAsClient会抛出,而Filezilla客户端能够连接?

  2. 使用TLS 1.2时是否存在任何.NET / Windows 10 / CryptoAPI证书限制?

  3. 如果有限制,为什么FileZilla没有强制执行?

  4. 为什么会出现如此神秘的错误消息:'提供给该功能的令牌无效'?

1 个答案:

答案 0 :(得分:1)

我终于想通了。在这种情况下,“提供给函数的令牌无效”表示“链上的证书已使用不受支持或禁用的算法签名。”

实际上,这几乎总是意味着禁用。可在HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010003 Functions中找到已启用算法的列表。这是一个REG_MULTI_SZ,每个受支持的算法都有一个字符串。

我在Windows 10计算机上找到了这些值:

RSA/SHA256
RSA/SHA384
RSA/SHA1
ECDSA/SHA256
ECDSA/SHA384
ECDSA/SHA1
DSA/SHA1

我添加了

RSA/SHA512
ECDSA/SHA512

如果您添加了RSA/MD5,则您的密钥将开始起作用,但是您对此密钥的强调不够,这是一个的主意,因为MD5已经坏了。

Filezilla之所以有效,是因为Mozilla不信任主机密码套件。