有没有.NET HttpWebRequest.ClientCertificates的Javascript等价物?

问题描述:

我有这样的代码工作在C#:有没有.NET HttpWebRequest.ClientCertificates的Javascript等价物?

var request = (HttpWebRequest)WebRequest.Create("https://x.com/service"); 
request.Method = "GET"; 

// Add X509 certificate 
var bytes = Convert.FromBase64String(certBase64); 
var certificate = new X509Certificate2(bytes, password); 
request.ClientCertificates.Add(certificate, "password")); 

有什么办法复制在Javascript这个要求吗?第三方库对我的目的会很好。

+0

JavaScript环境是什么?在浏览器JavaScript中,当然没有希望做这样的事情。 – bobince 2010-03-15 14:06:15

+0

在浏览器中。为什么不可能? – 2010-03-15 14:21:02

在浏览器JavaScript中,没有希望做类似的事情。

XMLHttpRequest接口为您提供有限的自定义连接的功能。您没有任何机会影响SSL协商,并且您无法向与您运行的域不同的域请求(出于非常好的安全原因)。

你可以解决这个问题,并使用低级套接字和复杂的库来实现HTTPS,除了JS不允许你访问低级套接字。浏览器脚本只是不被期望或不信任做这样的事情:再次,有一些严重的安全问题需要担心,如果任何网页可以让你发送随机连接到其他服务器(包括私人本地网络上的)。

HTML5为您提供WebSocket,它可用于低级别,低延迟的连接,但它故意与其他服务不兼容,以阻止您攻击它们。一般来说,任何你想让浏览器与之通话的东西,无论是通过XMLHttpRequest,WebSocket还是Flash Socket,都必须有意设置来侦听浏览器。

+0

不是我想要的答案,而是一个高质量的答案;谢谢。 – 2010-03-16 12:19:33

您可以查看开源Forge项目。它实现了JavaScript中的SSL/TLS,包括指定客户端证书的能力。

http://github.com/digitalbazaar/forge/blob/master/README

该项目利用通过Flash提供原始套接字接口,并实现JavaScript中的实际TLS层。但是,由于使用了Flash,因此您联系的服务器需要提供跨域策略文件。 Forge项目中包含一个Apache模块,服务器管理员可以安装该模块以轻松提供此策略文件。

如果您正在寻找一种不涉及服务器的解决方案,并且您拥有管理权限 - 那么它确实看起来像是运气不好。像其他海报一样,bobince说,所有通过原始套接字(或类似的)通过网络浏览器进行通信的新方法都要求网络服务器手动“选择加入”。