google-chrome - 在 Chrome 应用程序中使用证书进行 SSL 客户端身份验证

标签 google-chrome authentication ssl google-chrome-extension google-chrome-app

我正在编写一个 Chrome 应用程序,它需要一个带有客户端身份验证的 SSL 套接字。我以前在 Java 中使用同一组信任库和 keystore 完成过此操作。

这是我在 Chrome(Mac 和 Chromebook)上所做的:

  • 将客户端 key (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);
        });
    });
});

我的问题是:

  1. Chrome API 是否支持使用证书进行客户端身份验证?
  2. 如果支持,我该如何向 chrome 提供证书?

最佳答案

Chrome API 确实支持通过 tcp.secure 进行客户端身份验证,但有一个非常重要的警告 - 用于 SSL 支持的原始 feature request 是这样说的:

Using the built-in TLS stack. Sorry, no ability to add/manage certs here, just use the existing configuration.

因此,正如您所建议的,您需要手动将证书添加到 Chrome。在设置 -> 显示高级设置 -> HTTPS/SSL -> 管理证书中有用于导入和导出的工具。您可能还需要通过在 this bug 之前调用 tcp.setPaused 来解决 tcp.secure

但是,如果您需要比 Chrome API 提供的更细粒度的控制,您还可以在普通的 Chrome TCP 套接字 API 之上添加您自己的 javascript TLS 实现。幸运的是,库 forge 已经有一个这样的实现。您可以看到将 forgechrome.sockets.tcp here 结合使用的示例。这种方法提供了更精细的控制,启用证书固定等,否则不支持,但请注意,forge 尚不支持 TLS 1.2 或 ECDHE 密码套件(尽管这些功能计划在 roadmap 上) .

关于google-chrome - 在 Chrome 应用程序中使用证书进行 SSL 客户端身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911137/

相关文章:

php - 如何防止 chrome 使用 Comet 获取 'Aw snap!' ?

php - 使用 PHP + Curl 固定 TLS 公钥?

javascript - Google Chrome 中的开发者工具未显示

google-chrome - Javascript 捐赠按钮 Paypal

HTML5 可拖动的重影图像并不总是显示在 Chrome 中

c# - 如何使用带有客户端证书的 (Microsoft.AspNetCore.TestHost)TestServer

基于 nginx 的 ssl 终止符上的 SSL 错误

火力地堡 : CONFIGURATION_NOT_FOUND

java - 使用相互身份验证时在 Servlet 中检索客户端证书?

javascript - AngularJs 授权服务行为异常