我正在编写一个 Chrome 应用程序,需要具有带有客户端身份验证的 SSL 套接字。我之前在 Java 中使用同一组信任存储和密钥存储完成了此操作。
以下是我在 Chrome(Mac 和 Chromebook)上所做的操作:
将客户端密钥 (p12) 和 CA(一个根 CA,一个中间 CA)添加到系统。
在 Chrome 应用程序中,尝试旧版socket
API 和新sockets.tcp
API.
总是收到错误ERR_SSL_CLIENT_AUTH_CERT_NEEDED
。但我认为系统中已经拥有正确的客户端证书和 CA。
旧版套接字 API 的代码:
chrome.socket.create('tcp',{},function(createInfo){
mySocketId = createInfo.socketId;
chrome.socket.connect(mySocketId,'host', 12345, function(connectResult){
chrome.socket.secure(mySocketId,{},function(secureResult){
console.log('secureResult '+secureResult);
});
});
});
我的问题是:
- Chrome API 是否支持使用证书进行客户端身份验证?
- 如果支持,我如何向 Chrome 提供证书?
Chrome API确实支持客户端身份验证tcp.secure https://developer.chrome.com/apps/sockets_tcp#method-secure,但有一个非常重要的警告 - 原始功能要求 https://code.google.com/p/chromium/issues/detail?id=132896#c48对于 SSL 支持,这样说:
使用内置 TLS 堆栈。抱歉,无法在此处添加/管理证书,只需使用现有配置。
因此,正如您所建议的,您需要手动将证书添加到 Chrome 中。设置 -> 显示高级设置 -> HTTPS/SSL -> 管理证书中有用于导入和导出的工具。您可能还需要解决this bug https://code.google.com/p/chromium/issues/detail?id=403076通过致电tcp.setPaused https://developer.chrome.com/apps/sockets_tcp#method-setPaused before tcp.secure https://developer.chrome.com/apps/sockets_tcp#method-secure.
但是,如果您需要比 Chrome API 提供的更细粒度的控制,您也可以在正常的 Chrome TCP 套接字 API 之上添加您自己的 javascript TLS 实现。幸运的是,图书馆forge https://github.com/digitalbazaar/forge已经有一个这样的实现。您可以使用以下示例查看forge
和这个结合chrome.sockets.tcp
here https://github.com/flackr/circ/blob/master/package/bin/net/ssl_socket.js。这种方法提供了更精细的控制,支持诸如证书固定等功能,这些功能在其他情况下是不支持的,但请注意,forge 尚不支持 TLS 1.2 或 ECDHE 密码套件(尽管这些功能计划在roadmap https://github.com/digitalbazaar/forge/issues/203).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)