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

Google chrome 在Chrome应用程序中使用证书进行SSL客户端身份验证,google-chrome,authentication,ssl,google-chrome-extension,google-chrome-app,Google Chrome,Authentication,Ssl,Google Chrome Extension,Google Chrome App,我正在编写一个Chrome应用程序,它需要一个带有客户端身份验证的SSL套接字。我以前在Java中使用相同的信任存储和密钥存储集完成过这项工作 以下是我在Chrome(Mac和Chromebook)上所做的工作: 将客户端密钥(p12)和CA(一个根CA,一个中间CA)添加到系统中 在Chrome应用程序中,尝试传统的socketAPI和新的sockets.tcpAPI 始终接收错误错误\u SSL\u客户端\u身份验证\u证书\u所需。但是我想我已经在系统中有了正确的客户端证书和CA 旧套

我正在编写一个Chrome应用程序,它需要一个带有客户端身份验证的SSL套接字。我以前在Java中使用相同的信任存储和密钥存储集完成过这项工作

以下是我在Chrome(Mac和Chromebook)上所做的工作:

  • 将客户端密钥(p12)和CA(一个根CA,一个中间CA)添加到系统中

  • 在Chrome应用程序中,尝试传统的
    socket
    API和新的
    sockets.tcp
    API

  • 始终接收错误
    错误\u SSL\u客户端\u身份验证\u证书\u所需
    。但是我想我已经在系统中有了正确的客户端证书和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);
        });
    });
});
我的问题是:

  • ChromeAPI是否支持使用证书进行客户端身份验证
  • 如果支持,我如何向chrome提供证书

  • Chrome API确实支持通过进行客户端身份验证,但有一个非常重要的警告-最初的SSL支持说明:

    使用内置的TLS堆栈。抱歉,此处无法添加/管理证书,请使用现有配置

    因此,正如您所建议的,您需要手动将证书添加到Chrome。在设置->显示高级设置->HTTPS/SSL->管理证书中有导入和导出功能。您可能还需要在之前打电话解决问题

    但是,如果您需要比chromeapi提供的更细粒度的控制,您也可以在普通chrometcpsocketapi之上添加您自己的javascript TLS实现。幸运的是,该库已经有一个这样的实现。您可以看到一个使用
    forge
    chrome.sockets.tcp
    的示例。这种方法提供了更细粒度的控制,支持证书固定等其他方面不支持的功能,但请注意,forge还不支持TLS 1.2或ECDHE密码套件(尽管这些功能计划在上)