Как я могу общаться между двумя программами node.js, используя TLS? - PullRequest
0 голосов
/ 29 апреля 2019

У меня проблемы с 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) варьируется от запуска к пробегу.

В чем причина этой ошибки и как лучше ее обойти?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...