У меня проблемы с TLS в другом приложении, поэтому я создаю скелетную версию приложения, используя только части TLS для его устранения. Тем не менее, я получаю очень странную ошибку при попытке сделать это.
Код сервера:
var tls = require("tls");
var fs = require("fs");
const serverOptions = {
key: fs.readFileSync("frontend.key"),
cert: fs.readFileSync("frontend.pem"),
ca: [ fs.readFileSync("root-ca.pem") ],
requestCert: true,
};
var server = tls.createServer(serverOptions);
server.listen(4532);
console.log("Server up");
server.on('connection', function(stream) {
console.log("Connected: " + stream.address().address);
stream.on('data', function(d) {
stream.write(("" + d).split("").reverse().join(""));
stream.destroy();
});
stream.write("The sky above the port was the color of television, tuned to a dead channel");
});
Код клиента:
var tls = require("tls");
var fs = require("fs");
const streamOptions = {
key: fs.readFileSync("backend.key"),
cert: fs.readFileSync("backend.pem"),
ca: [ fs.readFileSync("root-ca.pem") ],
requestCert: true,
host: "localhost",
port: "4532",
};
var stream = tls.connect(streamOptions, function(){console.log("Connected")});
var flag = 0;
stream.on('data', function(d) {
console.log("Received " + d);
if (flag === 0) {
stream.write("This string in reverse, please");
flag = 1;
} else {
stream.destroy();
}
});
Код, который я использовал для автоматической генерации ssl-сертификатов (bash):
# create server directory
mkdir -pv server
# create a root CA, used to sign off on others
openssl genrsa \
-out server/root-ca.key \
2048
# sign the root CA
openssl req \
-x509 \
-new \
-nodes \
-key server/root-ca.key \
-days 1024 \
-out server/root-ca.pem \
-subj "/C=US/ST=California/L=Provo/O=Nobody/CN=localhost"
# function to create a device certificate for a particular domain
create_certificate() {
# $1 should be name, $2 should be domain
name=$1
domain=$2
echo "------- Creating certificate $name -------"
# generate key
mkdir -pv $name
openssl genrsa \
-out $name/$name.key \
2048
# create request for signing
openssl req -new \
-key $name/$name.key \
-out $name/$name.csr \
-subj "/C=US/ST=California/L=Provo/O=Nobody/CN=$domain"
# sign the request using the root CA
openssl x509 \
-req -in $name/$name.csr \
-CA server/root-ca.pem \
-CAkey server/root-ca.key \
-CAcreateserial \
-out $name/$name.pem \
-days 500
rsync -a server/root-ca.pem $name/root-ca.pem
}
create_certificate frontend localhost
create_certificate backend localhost
Когда я запускаю код сервера, кажется, он работает нормально. Однако, когда я запускаю код клиента, он выдает мне ошибку:
Ошибка: 139701226773376: ошибка: 140770FC: процедуры SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол: s23_clnt.c: 827:
Следует отметить, что первое число (139701226773376) варьируется от запуска к пробегу.
В чем причина этой ошибки и как лучше ее обойти?