繁体   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