如何使用Chrome Packaged App确保安全套接字通信

时间:2014-04-25 13:37:34

标签: javascript sockets google-chrome tcp google-chrome-app

我正在开发Chrome打包应用程序,它是一个客户端应用程序,通过TCP将数据发送到外部tcp服务器。

如何确保我连接的套接字使用TLS?在客户端连接的什么时候我需要添加一个参数来启用它?证书的存储方式/位置在哪里?我是否需要手动处理此操作,还是Chrome会为我执行此操作?

这是我的代码示例:

chrome.app.runtime.onLaunched.addListener(function(launchData){
    chrome.sockets.tcp.create({persistent: false, name: 'my_socket'}, function(createInfo) {
        var socketId = createInfo.socketId;
        chrome.storage.local.set({socketId: socketId}, function(){
            chrome.sockets.tcp.connect(socketId, IP_ADDRESS, PORT, function(result){
                if (result < 0){
                    // There was an error.
                } else {
                    chrome.sockets.tcp.setKeepAlive(socketId, true, 60, function(result){
                        if (result < 0){
                            // There was an error.
                        } else {
                            chrome.sockets.tcp.send(socketId, myData, function(sendInfo){
                                if (!sendInfo || sendInfo.resultCode < 0){
                                    // There was an error.
                                } else {
                                    // Data Sent, await response in chrome.sockets.tcp.onReceive
                                }
                            });
                        }
                    });
                }
            });
        });
    });
});

1 个答案:

答案 0 :(得分:5)

chrome.socket不提供内置SSL支持(但无论如何,请参阅http://crbug.com/132896),您需要在应用程序中添加SSL编码/解码。建立TCP连接后,您可以开始SSL协商(即在chrome.sockets.tcp.connect调用您的回调函数之后)。

我最近使用在JS中实现SSL的forge javascript library向CIRC添加了SSL支持。您可以在CIRC中看到完整的镀铬插座连接包裹:https://github.com/flackr/circ/blob/master/package/bin/net/ssl_socket.js

请注意,我实际上并未添加身份验证,请参阅verify: options.verify || function() { return true },但可以使用相应的验证功能替换它。