有没有.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这个要求吗?第三方库对我的目的会很好。
在浏览器JavaScript中,没有希望做类似的事情。
XMLHttpRequest接口为您提供有限的自定义连接的功能。您没有任何机会影响SSL协商,并且您无法向与您运行的域不同的域请求(出于非常好的安全原因)。
你可以解决这个问题,并使用低级套接字和复杂的库来实现HTTPS,除了JS不允许你访问低级套接字。浏览器脚本只是不被期望或不信任做这样的事情:再次,有一些严重的安全问题需要担心,如果任何网页可以让你发送随机连接到其他服务器(包括私人本地网络上的)。
HTML5为您提供WebSocket,它可用于低级别,低延迟的连接,但它故意与其他服务不兼容,以阻止您攻击它们。一般来说,任何你想让浏览器与之通话的东西,无论是通过XMLHttpRequest,WebSocket还是Flash Socket,都必须有意设置来侦听浏览器。
不是我想要的答案,而是一个高质量的答案;谢谢。 – 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说,所有通过原始套接字(或类似的)通过网络浏览器进行通信的新方法都要求网络服务器手动“选择加入”。
JavaScript环境是什么?在浏览器JavaScript中,当然没有希望做这样的事情。 – bobince 2010-03-15 14:06:15
在浏览器中。为什么不可能? – 2010-03-15 14:21:02