自己署名証明書を使用してNode.js0.8.8を使用してTLSサーバー/クライアントセットアップを作成しようとしています。
重要なサーバーコードは次のようになります
var tlsServer = tls.createServer({
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
}, function (connection) {
// [...]
});
tlsServer.listen(3000);
このサーバーに接続しようとすると、次のコードを使用します。
var connection = tls.connect({
host: '192.168.178.31',
port: 3000,
rejectUnauthorized: true,
ca: [ fs.readFileSync('server-cert.pem') ]
}, function () {
console.log(connection.authorized);
console.log(connection.authorizationError);
console.log(connection.getPeerCertificate());
});
行を削除すると
ca: [ fs.readFileSync('server-cert.pem') ]
クライアント側のコードから、Node.jsは私に通知するエラーをスローしますDEPTH_ZERO_SELF_SIGNED_CERT
。私が理解している限り、これは自己署名証明書であり、この証明書を信頼する他の当事者がいないという事実によるものです。
削除した場合
rejectUnauthorized: true,
同様に、エラーはなくなりました-しかし、これconnection.authorized
はfalse
事実上、私の接続が暗号化されていないことを意味します。とにかく、getPeerCertificate()
私を使用してサーバーから送信された証明書にアクセスできます。暗号化された接続を強制したいので、この行を削除できない可能性があることを理解しています。
ca
これで、このプロパティを使用して、Node.jsに信頼させたいCAを指定できることを読みました。TLSモジュールのドキュメントは、サーバー証明書をca
アレイに追加するだけで十分であり、すべてが正常であることを示しています。
そうすれば、このエラーはなくなりますが、新しいエラーが発生します。
Hostname/IP doesn't match certificate's altnames
私にとってこれは、CAが基本的に信頼されていることを意味します。したがって、これで問題ありませんが、証明書は、私が使用しているホストとは別のホスト用に作成されました。
を使用して証明書を作成しました
$ openssl genrsa -out server-key.pem 2048
$ openssl req -new -key server-key.pem -out server-csr.pem
$ openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem
ドキュメントが示すように。CSRを作成するとき、国、州、...、一般名(CN)などの通常の質問があります。SSL証明書について「Web上で」と言われるので、CNとして名前を指定するのではなく、使用するホスト名を指定します。
そして、これはおそらく私が失敗するところです。
私は試した
localhost
192.168.178.31
eisbaer
eisbaer.fritz.box
ここで、最後の2つは、私のマシンのローカル名と完全修飾ローカル名です。
私がここで間違っていることについて何か考えはありますか?