我试图使用相互证书身份验证从TLS安全服务发送和接收数据。我成功连接到该服务,并且回复是我已获得授权。我将数据发送到服务器,然后连接'数据'事件......我知道我的数据准确发送,因为我获得了准确的响应数据。nodeJS TLS在数据中包含奇数字符
数据在每个块的开始和结尾(有时在中间)包含奇数字符。
HTTP/1.1 200 OK
X-Powered-By: Servlet/2.5
Set-Cookie: JSESSIONID=8f2a41305cbe859001f1d54e5e80; Path=/xds; Secure
Content-Type: application/soap+xml;charset=utf-8
Transfer-Encoding: chunked
Date: Thu, 13 Feb 2014 01:53:14 GMT
6c
<?xml version='1.0' encoding='UTF-8'?><S:Envelope x.........
2000
<ns4:AdhocQueryResponse xmlns:ns2="urn:oasis:names:.........
1485
8425c" objectType="urn:oasis:names:tc:ebxml-regrep:.........
0
这里是代码我使用:
var tls = require('tls');
var net = require('net');
var receiveData = function(sock) {
var response = '';
sock.on('error', function(err) {
console.log("Socket error: " + err);
});
sock.on('data', function(d){
response += d.toString();
});
sock.on('end', function() {
console.log("Done receiving data from via TLS: " + response.length);
console.log(response);
});
};
var sendData = function(sock) {
console.log("Sending request to HIE");
var req = 'POST ' + path + ' HTTP/1.1\r\n' +
'Host: localhost\r\n' +
'Content-Length: ' + data.length + '\r\n' +
'Content-Type: application/soap+xml; charset=utf-8\r\n' +
'SOAPAction: "http://www.w3.org/2003/05/soap-envelope"\r\n' +
'\r\n';
sock.write(req);
sock.write(data);
};
var options = {
port: port,
host: host,
key: fs.readFileSync(tls_key, encoding='ascii'),
cert: fs.readFileSync(tls_cert, encoding='ascii'),
ca: fs.readFileSync(tls_ca, encoding='ascii')
};
var sock = tls.connect(options, function() {
var authorized = sock.authorized;
if (authorized) {
console.log("Successfully connected via TLS");
sock.setKeepAlive(true);
receiveData(sock);
sendData(sock);
} else {
console.log("Unauthorized to connect via TLS: " + sock.authorizationError);
}
});
有谁知道为什么我收到这些奇怪的字符?我试过设置袜子的setEncoding('utf8'),并且删除了我需要的.toString()数据。但是,这并没有解决这些奇怪字符的问题。
我想他们可能是大块数据量的指标......但是,“6c”位于第一个块的中间。所以,我不认为就是这样。更重要的是,即使在该块中发送了大量数据,第三块也是0。
请帮忙!