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

标签 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
                                }
                            });
                        }
                    });
                }
            });
        });
    });
});

最佳答案

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

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

请注意,我实际上并没有添加身份验证,请参阅verify: options.verify || function() { return true },但这可以用适当的验证函数替换。

关于javascript - 如何使用Chrome Packaged App确保安全的套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23294792/

相关文章:

javascript - 如何阻止 this.form.reset() 触发我的表单操作?

javascript - 当 JavaScript 是单线程语言时,如何在 JavaScript 中实现异步非阻塞代码?

java - 模拟函数到底有什么作用?

Java 从网络摄像头获取图像并通过套接字发送

Linux 中的 C 代码到 Windows 中的 C 代码

javascript - 如何在 JavaScript 中访问粘贴文件的文件名(而不仅仅是数据)?

java - 在 Java 应用程序中获取 Chrome 浏览器

javascript - javascript setInterval 的内存泄漏

javascript - Mongoose 从远程服务器获取外部数据

google-chrome - 在Chrome中添加书签时增加下拉文件夹列表的方法是什么?