だから私は基本的なノードアプリに取り組んでいます。クライアントはSSLで接続します。サーバー証明書を使用するだけで問題なく動作するように見えますが、クライアント証明書を要求しようとすると、何を投げても動作し続けます。
このサイトでこれに関連する質問を見つけましたが、そこに含まれている回答は私にはうまくいかなかったようです。これが1つです。
関連するコードは次のとおりです。
var restify=require('restify');
var fs=require('fs');
var server=restify.createServer({
certificate: fs.readFileSync('../certs/server.crt'),
key: fs.readFileSync('../certs/server.key'),
ca: fs.readFileSync('../certs/ca.crt'),
requestCert: true,
rejectUnauthorized: true,
});
...
server.listen(8080, function() {
console.log('servers up...');
});
私はcurlを使用して接続をテストしていますが、ほとんどすべてのものが入ってくると、リクエストオブジェクトがコンソールに記録されます。
私が使用したさまざまなcurlコマンドラインは次のとおりです。
curl -k https://localhost:8080/hello
curl -k -E user.combined:password https://localhost:8080/hello
証明書がローカルで生成され、curlがそれらを検証したいので、私は-kを使用しています。(これが問題になる可能性がありますか??)
したがって、ノードインスタンスに何を送信しても、ユーザーが適切な証明書を使用している場合に期待する出力が得られます(上記の2番目のcurlコマンドラインにあるため)。
コンソールにログインすると、次のように表示されます。
req = { socket:
{ pair:
_secureEstablished: true,
_isServer: true,
...
_rejectUnauthorized: false,
_requestCert: false,
(further down)
authorized: false
明らかに、私が完全にスピードを上げていない何かがここで起こっています。どうなり得るか?
==更新==
-vをcurlと一緒に使用すると、curl出力にこれを含むいくつかの追加情報が得られます。
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1... connected
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
上記のように、私のca.crtファイルは(相対)ディレクトリ../certsにあります
ありがとうございました。