我正在开发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
}
});
}
});
}
});
});
});
});
答案 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 }
,但可以使用相应的验证功能替换它。