IIS不再信任任何CA进行客户端身份validation

昨天,我们的构build服务器(运行Windows Server 2012)的IIS开始拒绝我们客户的证书。 证书使用我们自己的自签名CA证书进行签名,该证书已添加到受信任的根证书颁发机构(本地机器)。 直到昨天,这一直在完美地工作。 我拼命试图找出可能导致这种情况的原因。 我在事件查看器中看不到Schannel错误或警告。

然而,在对服务器运行openssl之后,我发现了一些可疑的东西。 它看起来像IIS没有发送一个可信的客户端证书颁发机构列表中的一个CA。 日志看起来像这样:

CONNECTED(00000144) depth=0 CN = Localhost verify error:num=18:self signed certificate verify return:1 depth=0 CN = Localhost verify return:1 --- Certificate chain 0 s:/CN=Localhost i:/CN=Localhost --- Server certificate -----BEGIN CERTIFICATE----- MIIC+zCCAeOgAwIBAgIQOkacw1RkE4tI9+HnyEXFvzANBgkqhkiG9w0BAQsFADAU MRIwEAYDVQQDEwlMb2NhbGhvc3QwHhcNMTMwODA1MDgwOTU1WhcNMzkxMjMxMjM1 OTU5WjAUMRIwEAYDVQQDEwlMb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQC/kc5BLMcmuNoZe8jkrJQt/kZFD7EnVOtvEEJt0dZJG008TqXD MdXnybBWPCbvQIFoxREY6wjPExcU39SzbCWLGV99Z+eR0zFkOpK3SSppe9fulkP7 ktiDWTSkgJUx1/EpHeJHL1hy7YKRFYOtPlewZYjaklh/wND5F88mOri/lEoENpWO 0fLrJS+Nnizeti7LEzstNtU7+AH4h6njCujrQwjwdCr1QTggjLj3iOy7fpUqYwKe mNGNIAR8XI06JzYAFDpcdo4PMZScNfd0cqcMIHJuWUoaciW9qwrbHWyr1B3hBCX0 luQSF4uHVbT+8yOI4fOWL4PTL/6ZNEfl4WrxAgMBAAGjSTBHMEUGA1UdAQQ+MDyA EHhoR/6NVn2yfadGy1PvZ26hFjAUMRIwEAYDVQQDEwlMb2NhbGhvc3SCEDpGnMNU ZBOLSPfh58hFxb8wDQYJKoZIhvcNAQELBQADggEBAIujtVAr3UvG7dB55SBgQP5p AiOum0DM9xULarl+Wz/GdTvdK65PcUB34DlG8pEhz5nRsX5I/nZvLF/7U5OCICp2 Gnvbm2jLYnlacB16+ds/4cgG65a/CddSdVyRIYa2YdGXZGiJ6zTkEQWEH4tXmkO+ InzHsBEVO1MT1nAfkZp6MzgEbCv8Xus3QIxdnJZZYHMzXcD+48oQEfP5BhHXW/iN MlNsuN8wwwpS61r2g9Bu8AhMcbnvoMNdYbBtPC5+ltlOQK0RNNTcqOr4kJj/BwO3 fGS8/lh9FTZFq8c4ES94hoEu4szUfA4jkTvt9SWossOBPehhIWKUgx5MIdC6Hgc= -----END CERTIFICATE----- subject=/CN=Localhost issuer=/CN=Localhost --- No client certificate CA names sent --- SSL handshake has read 1291 bytes and written 487 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-SHA256 Session-ID: C1480000D74420B9A5C00326C73B6ACC652ED4D077CD02C72CE347CE2F603CA8 Session-ID-ctx: Master-Key: F8E3625F2A36FE2CA963F2FE2A0774B7B6AEEC0D0592DC9CD46C5FC98ADECD77 82FE8CF91D71C318A970BEEA4BE384A8 Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1377623899 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- read:errno=10054 --- Certificate chain 0 s:/CN=Localhost i:/CN=Localhost --- Server certificate -----BEGIN CERTIFICATE----- MIIC+zCCAeOgAwIBAgIQOkacw1RkE4tI9+HnyEXFvzANBgkqhkiG9w0BAQsFADAU MRIwEAYDVQQDEwlMb2NhbGhvc3QwHhcNMTMwODA1MDgwOTU1WhcNMzkxMjMxMjM1 OTU5WjAUMRIwEAYDVQQDEwlMb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQC/kc5BLMcmuNoZe8jkrJQt/kZFD7EnVOtvEEJt0dZJG008TqXD MdXnybBWPCbvQIFoxREY6wjPExcU39SzbCWLGV99Z+eR0zFkOpK3SSppe9fulkP7 ktiDWTSkgJUx1/EpHeJHL1hy7YKRFYOtPlewZYjaklh/wND5F88mOri/lEoENpWO 0fLrJS+Nnizeti7LEzstNtU7+AH4h6njCujrQwjwdCr1QTggjLj3iOy7fpUqYwKe mNGNIAR8XI06JzYAFDpcdo4PMZScNfd0cqcMIHJuWUoaciW9qwrbHWyr1B3hBCX0 luQSF4uHVbT+8yOI4fOWL4PTL/6ZNEfl4WrxAgMBAAGjSTBHMEUGA1UdAQQ+MDyA EHhoR/6NVn2yfadGy1PvZ26hFjAUMRIwEAYDVQQDEwlMb2NhbGhvc3SCEDpGnMNU ZBOLSPfh58hFxb8wDQYJKoZIhvcNAQELBQADggEBAIujtVAr3UvG7dB55SBgQP5p AiOum0DM9xULarl+Wz/GdTvdK65PcUB34DlG8pEhz5nRsX5I/nZvLF/7U5OCICp2 Gnvbm2jLYnlacB16+ds/4cgG65a/CddSdVyRIYa2YdGXZGiJ6zTkEQWEH4tXmkO+ InzHsBEVO1MT1nAfkZp6MzgEbCv8Xus3QIxdnJZZYHMzXcD+48oQEfP5BhHXW/iN MlNsuN8wwwpS61r2g9Bu8AhMcbnvoMNdYbBtPC5+ltlOQK0RNNTcqOr4kJj/BwO3 fGS8/lh9FTZFq8c4ES94hoEu4szUfA4jkTvt9SWossOBPehhIWKUgx5MIdC6Hgc= -----END CERTIFICATE----- subject=/CN=Localhost issuer=/CN=Localhost --- **No client certificate CA names sent** --- SSL handshake has read 1291 bytes and written 556 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-SHA256 Session-ID: C1480000D74420B9A5C00326C73B6ACC652ED4D077CD02C72CE347CE2F603CA8 Session-ID-ctx: Master-Key: F8E3625F2A36FE2CA963F2FE2A0774B7B6AEEC0D0592DC9CD46C5FC98ADECD77 82FE8CF91D71C318A970BEEA4BE384A8 Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1377623899 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- 

注意文本: 没有客户端证书CA名称发送 。 当我使用我们的Java客户端进行debugging时,似乎遇到同样的问题。 握手过程中说:“证书颁发机构:”。

我的理解是,IIS应该返回受信任根证书颁发机构的所有证书。 在我的本地开发机器上对IIS运行相同的请求证实了这一点。 该IIS服务器返回大量的证书(包括我们自己签名的CA证书)。

所以我的问题是:为什么IIS不再在握手期间返回任何可信的CA证书?

更新1我已经通过激活详细的CAPI日志发现了一些更多的信息。

 - UserData - CertGetCertificateChain - Certificate [ fileRef] 4FEA293C62EAF436D286F700F618814E72D49347.cer [ subjectName] lIv-zQE|3M-OywU - AdditionalStore - Certificate [ fileRef] 4FEA293C62EAF436D286F700F618814E72D49347.cer [ subjectName] lIv-zQE|3M-OywU - ExtendedKeyUsage - Usage [ oid] 1.3.6.1.5.5.7.3.2 [ name] Client Authentication - Flags [ value] 40000004 [ CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL] true [ CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT] true - ChainEngineInfo [ context] machine - CertificateChain [ chainRef] {317A4B99-2193-4AA6-9D3D-768AF747C66D} - TrustStatus - ErrorStatus [ value] 1010040 [ CERT_TRUST_REVOCATION_STATUS_UNKNOWN] true [ CERT_TRUST_IS_OFFLINE_REVOCATION] true [ CERT_TRUST_IS_PARTIAL_CHAIN] true - InfoStatus [ value] 0 - ChainElement - Certificate [ fileRef] 4FEA293C62EAF436D286F700F618814E72D49347.cer [ subjectName] lIv-zQE|3M-OywU - SignatureAlgorithm [ oid] 1.2.840.113549.1.1.11 [ hashName] SHA256 [ publicKeyName] RSA - PublicKeyAlgorithm [ oid] 1.2.840.113549.1.1.1 [ publicKeyName] RSA [ publicKeyLength] 2048 - TrustStatus - ErrorStatus [ value] 1000040 [ CERT_TRUST_REVOCATION_STATUS_UNKNOWN] true [ CERT_TRUST_IS_OFFLINE_REVOCATION] true - InfoStatus [ value] 4 [ CERT_TRUST_HAS_NAME_MATCH_ISSUER] true - ApplicationUsage [ any] true IssuanceUsage - RevocationInfo - RevocationResult The revocation function was unable to check revocation because the revocation server was offline. [ value] 80092013 - EventAuxInfo [ ProcessName] lsass.exe - CorrelationAuxInfo [ TaskId] {11C0F7E0-B3E6-4B4B-AA98-9A2AE7800A03} [ SeqNumber] 3 - Result A certificate chain could not be built to a trusted root authority. [ value] 800B010A 

我以前有过同样的问题,而且似乎是在Windows更新后发生的。 这发生在我身上不止一次。 (Server 2003和Server 2008)。 我努力寻找适合自签名证书的解决scheme。 我经常想知道机器密钥是否改变,或者改变algorithm? 这是甚至有可能在Windows更新后? 一旦我们发现防病毒引起的问题,所以我会检查,尤其是那些与所有的“反间谍”/“安全互联网浏览器”和“恶意软件”function – AVG有罪在这里。

无论如何,我们要做的就是重新创build证书,并在本地机器上重新安装 – 小型客户机很容易推出。 最好的解决scheme是在构build,testing和登台服务器上使用“廉价”通配符证书。 通配证书节省了大量时间,对于“自发”客户端演示非常有用。

我遇到了同样的问题,我终于弄清楚这个网站工作正常,但被欺骗了openssl消息(这只是谈判)

正确的步骤是:

  1. 正确设置IIS SSL绑定
  2. netsh http show sslcert并复制值

  3. 使用netsh http delete sslcert删除服务器SSL证书绑定

  4. 添加服务器SSL证书绑定与netsh http add sslcert ipport=0.0.0.0:443 certhash=.... appid=.... sslctlstorename=ClientAuthIssuer clientcertnegotiation=enable

  5. validation设置是应用与netsh http show sslcert

  6. (仅限Windows 2012 R2)将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\SendTrustedIssuerList为1

clientcertnegiotiation是需要显示列表浏览器/ openssl,与它禁用一个configuration良好的客户端仍然可以发送正确的证书。