簡體   English   中英

如何在javascript中使用證書的私鑰對消息進行簽名

[英]How to sign a message using private key of the certificate in javascript

我的本地驅動器上有一個 CNG/CAPi 證書。 它是在 windows 證書庫中導入的。我想從瀏覽器(如 Chrome、IE 等)訪問它。 我如何使用 Javascript/Jquery/Any Browser API 在 Windows 證書存儲中使用證書的私鑰對消息/隨機數(由服務器提供)進行簽名? 有什么可以參考的api嗎? 或者請讓我知道我可以使用javascript簽署消息的過程? 我嘗試過 WebCrypto Api,但沒有成功。 我需要從頭開始構建它,所以任何幫助將不勝感激。 代碼如下:

     var client = forge.tls.createConnection({
        server: false,
        caStore: { HOST: 'CN=ret512312.abc.xyz.net, O=xyz, S=ZG, C=CH' },
        cipherSuites: [
            forge.tls.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA,
            forge.tls.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA
        ],
        verify: function(connection, verified, depth, certs) {
            debugger;
            if (depth === 0) {
                var cn = certs[0].subject.getField('CN').value;
                if (cn !== 'example.com') {
                    verified = {
                        alert: forge.tls.Alert.Description.bad_certificate,
                        message: 'Certificate common name does not match hostname.'
                    };
                }
            }
        },

對 WebCrypto API 的主要批評之一是它無法訪問瀏覽器證書存儲中的信任點。 當然,它也不提供對整個系統的信任點的訪問(那會很糟糕)。 因此,您必須突破瀏覽器的沙箱才能執行此壯舉。

可以通過瀏覽器擴展等突破沙箱,但請注意,這些即將結束,因為並非每個(移動)瀏覽器都支持它們,您必須為每個瀏覽器分別編程。 以前,您會簽署小程序來執行此操作,但這些小程序很久以前就已被棄用(如果您問我,在 Sun / Oracle 完全管理不善之后)。

所以是的,不,對不起。 如果確實需要,最好設置一個受信任的網站,然后從那里恢復簽名證書(但請注意,您無法獲得比初始 TLS 連接提供的安全性高得多的安全性)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM