chrome.sockets.tcp.secure和TLS握手无法按预期工作

时间:2017-03-03 21:00:50

标签: javascript sockets tcp google-chrome-app

我正在使用新的Socket API(Chrome.sockets.tcp)执行Chrome应用程序。我已经能够成功地使所有HTTP请求正常工作。我遇到的问题是使用TLS握手进行HTTPS登录。我们创建了一个Visual Studio C#(RestRequest)应用程序。我们可以使用HTTPS进行连接。使用Wireshark,我注意到使用TLSv1实现了成功的通信。

我尝试了各种解决方案,并通过以下链接进行了参考/实验,并尝试提出解决方案。

还有更多链接!我已经编写了一堆测试应用程序,但在初始握手之后,所有应用程序都达到了死胡同。

以下代码序列似乎完成了握手,但我无法发送登录帖子。似乎套接字在握手后搞砸了。 (WireShark显示所有com在登录后都成功了。)

var that = this;
chrome.sockets.tcp.create({
     persistent: false,
     name: "hc",
     bufferSize: 8192
}, function (createInfo) {
     console.log("create info = " + JSON.stringify(createInfo));
     if (chrome.runtime.lastError) {
         error('Unable to create socket: ' + chrome.runtime.lastError.message);
     }
     that._socketId = createInfo.socketId;
     chrome.sockets.tcp.setPaused(that._socketId, true, function () {
         chrome.sockets.tcp.connect(that._socketId, that._httpHost, that._httpPort, function (result) {
             chrome.sockets.tcp.onReceive.addListener(that._onReceive.bind(this));
             chrome.sockets.tcp.onReceiveError.addListener(that._onReceiveError.bind(this));
             chrome.sockets.tcp.secure(that._socketId, function (secureResult) {
                 chrome.sockets.tcp.send(that._socketId, str2ab('POST / HTTP/1.1\r\nHOST: ' + that._httpHost + '\r\n\r\n'), function (sendResult) {});
             });
         });
     });
});

我已尝试从nmp forge实现TLSSocket,我得到的结果与上面的示例相同。

我们必须为此应用程序使用TCP,主要用于Chrome应用程序中的cookie支持。

有人有解决方案或建议吗?我们花了很多时间进行反复试验,似乎已经走到了尽头。

1 个答案:

答案 0 :(得分:0)

您需要在插座固定后取消插槽。例如chrome.sockets.tcp.setPaused(that._socketId, false, ...)