2010-03-15 105 views
1

我有這樣的代碼工作在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

回答

2

在瀏覽器JavaScript中,沒有希望做類似的事情。

XMLHttpRequest接口爲您提供有限的自定義連接的功能。您沒有任何機會影響SSL協商,並且您無法向與您運行的域不同的域請求(出於非常好的安全原因)。

你可以解決這個問題,並使用低級套接字和複雜的庫來實現HTTPS,除了JS不允許你訪問低級套接字。瀏覽器腳本只是不被期望或不信任做這樣的事情:再次,有一些嚴重的安全問題需要擔心,如果任何網頁可以讓你發送隨機連接到其他服務器(包括私人本地網絡上的)。

HTML5爲您提供WebSocket,它可用於低級別,低延遲的連接,但它故意與其他服務不兼容,以阻止您攻擊它們。一般來說,任何你想讓瀏覽器與之通話的東西,無論是通過XMLHttpRequest,WebSocket還是Flash Socket,都必須有意設置來偵聽瀏覽器。

+0

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

1

您可以查看開源Forge項目。它實現了JavaScript中的SSL/TLS,包括指定客戶端證書的能力。

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

該項目利用通過Flash提供原始套接字接口,並實現JavaScript中的實際TLS層。但是,由於使用了Flash,因此您聯繫的服務器需要提供跨域策略文件。 Forge項目中包含一個Apache模塊,服務器管理員可以安裝該模塊以輕鬆提供此策略文件。

如果您正在尋找一種不涉及服務器的解決方案,並且您擁有管理權限 - 那麼它確實看起來像是運氣不好。像其他海報一樣,bobince說,所有通過原始套接字(或類似的)通過網絡瀏覽器進行通信的新方法都要求網絡服務器手動「選擇加入」。

相關問題