Owin Twitter登录 - 根据验证程序,远程证书无效

69

最近我尝试使用 Twitter 登录时出现了这个错误,你有任何想法吗?

Stack Trace: 


[AuthenticationException: The remote certificate is invalid according to the validation procedure.]
   System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) +230
   System.Net.PooledStream.EndWrite(IAsyncResult asyncResult) +13
   System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) +123

[WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.]
   System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) +6432446
   System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) +64

不知道,但我也从昨天开始遇到这个问题。 甚至尝试创建一个新的MVC5项目,添加Twitter密钥,但仍然失败。 - MichaelLake
你试过谷歌这些错误信息吗?我看到了一些关于asp.net的页面,讨论了这两个错误。 - Caleb
8个回答

96

感谢开源技术的力量,我们可以看到Twitter证书的指纹已经编码在Katana项目中。

Microsoft.Owin.Security.Twitter.TwitterAuthenticationOptions

最近一些证书可能已经更改,现在指纹不再匹配。

请在您的 Twitter Auth 选项中为“VeriSign Class 3 Public Primary Certification Authority - G5”证书添加新的指纹到您的 Startup.Auth.cs(对于 MVC 用户)。

从默认值进行更改:

app.UseTwitterAuthentication(
    consumerKey: "XXXX",
    consumerSecret: "XXX"
);
app.UseTwitterAuthentication(new TwitterAuthenticationOptions
{
    ConsumerKey = "XXXX",
    ConsumerSecret = "XXXX",
    BackchannelCertificateValidator = new CertificateSubjectKeyIdentifierValidator(new[]
    {
        "A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
        "0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
        "7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
        "39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
        "5168FF90AF0207753CCCD9656462A212B859723B", //DigiCert SHA2 High Assurance Server C‎A 
        "B13EC36903F8BF4701D498261A0802EF63642BC3" //DigiCert High Assurance EV Root CA
    })
});

6
不得不将“CertValidator”更改为“CertificateThumbprintValidator”,并添加39A55D933676616E73A761DFA16A7E59CDE66FAD - Symantec Class 3 Secure Server CA - G4,现在我可以回到本来应该做的事情了! - Breandán
1
是的,谢谢你提供的信息。我已经创建了自己的证书验证器来识别这个问题。我会更新帖子。 - MichaelLake
10
再次发生了,我看到了Digicert。"5168FF90AF0207753CCCD9656462A212B859723B",//DigiCert SHA2高保证服务器CA "B13EC36903F8BF4701D498261A0802EF63642BC3" //DigiCert高保证EV根CA - Kenneth Ito
2
请注意,Katana 3.1 中已删除了证书,因此这不会在未来继续出现故障。 - Tratcher
1
如果有人仍在使用上述解决方案,请注意证书已经再次更改。请将“b76ba2eaa8aa848c79eab4da0f98b2c59576b9f4”添加到上述主题密钥标识符数组中(或更新Microsoft.Owin.Security.Twitter)。 - tbraun
显示剩余7条评论

87

总结一下,为了避免让人们在评论中深挖,这里是最新的配置:

app.UseTwitterAuthentication(new TwitterAuthenticationOptions
{
    ConsumerKey = "XXXX",
    ConsumerSecret = "XXXX",
    BackchannelCertificateValidator = new Microsoft.Owin.Security.CertificateSubjectKeyIdentifierValidator(new[]
    {
        "A5EF0B11CEC04103A34A659048B21CE0572D7D47", // VeriSign Class 3 Secure Server CA - G2
        "0D445C165344C1827E1D20AB25F40163D8BE79A5", // VeriSign Class 3 Secure Server CA - G3
        "7FD365A7C2DDECBBF03009F34339FA02AF333133", // VeriSign Class 3 Public Primary Certification Authority - G5
        "39A55D933676616E73A761DFA16A7E59CDE66FAD", // Symantec Class 3 Secure Server CA - G4
        "‎add53f6680fe66e383cbac3e60922e3b4c412bed", // Symantec Class 3 EV SSL CA - G3
        "4eb6d578499b1ccf5f581ead56be3d9b6744a5e5", // VeriSign Class 3 Primary CA - G5
        "5168FF90AF0207753CCCD9656462A212B859723B", // DigiCert SHA2 High Assurance Server C‎A 
        "B13EC36903F8BF4701D498261A0802EF63642BC3" // DigiCert High Assurance EV Root CA
    })
});

所有功劳归功于@MichaelLake和@KennethIto。


3
SO(指Stack Overflow)再次帮助了这个懒惰的开发者! - paz
7
有人知道Twitter何时宣布更改指纹(thumbprints)吗?或者我们总是必须等待它出现问题才能得知? - Nick
1
在我添加回调通道后,出现“响应状态代码不表示成功:401(需要授权)”的错误。 - Brian
1
我编辑了这个答案,包括Tim找到的Symantec Class 3 EV SSL CA - G3。 - TaeKwonJoe
2
我很想知道你们是如何确定需要添加哪些证书的?我正在使用 Fiddler 并启用了 HTTPS 解密,但我无法弄清楚如何找到缺少的证书? - Computer
显示剩余6条评论

6

关闭Fiddler。

不知何故,Fiddler网络调试器会影响Twitter的Oauth授权。


5

仅用于测试目的,也可以设置

options.BackchannelCertificateValidator = null;

并将其添加到您的Global.asax Application_Start事件中:

ServicePointManager.ServerCertificateValidationCallback = delegate 
{ 
    return true; 
};

3

DigiCert SHA2 高保真服务器 CA 的值“5168FF90AF0207753CCCD9656462A212B859723B”似乎无效。新值为“01C3968ACDBD57AE7DFAFF9552311608CF23A9F9”。有效期从2016年6月28日至2019年9月19日。您可以通过在 Chrome 中访问https://api.twitter.com/,然后单击地址栏中的挂锁以查看证书来查找它。


1
在Chrome上查看证书详细信息显示5168FF90AF0207753CCCD9656462A212B859723B是Authority Key Identifier(http://imgur.com/5xL7iV5),而01C3968ACDBD57AE7DFAFF9552311608CF23A9F9是Subject Key Identifier(http://imgur.com/R1FeAF0)。我不确定为什么您认为5168FF90AF0207753CCCD9656462A212B859723B无效。 - kimbaudi
1
我再次查看了证书,你是正确的,api.twitter.com具有较新的主题密钥标识符,其值为01C3968ACDBD57AE7DFAFF9552311608CF23A9F9(http://imgur.com/J9HaFoO)。 - kimbaudi

0

我曾经遇到过这个问题,我按照上面的帖子操作后,出现了另一条评论中提到的401(未授权)错误。

我去了我的Twitter开发者账户,取消了一个名为“启用回调锁定”的复选框。 点击保存,按下F5,它就可以工作了。

所以上面的代码对我有效。 如果您收到401,请再次检查Twitter账户中的复选框。


1
为了解决401(未经授权)错误,请将回调URL从*/signin-twitter/更改为*/signin-twitter,末尾不需要反斜杠。 - Sasa Tancev

0

对我来说,只需将Microsoft.Owin.Security.Twitter更新到3.1.0版本即可解决问题,甚至无需添加指纹!


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接