0

だから私は基本的なノードアプリに取り組んでいます。クライアントは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にあります

ありがとうございました。

4

1 に答える 1

2

これは、restify 1.4.4 ではサポートされていません。コードが Git リポジトリの master ブランチに追加されていることがわかるので、これは 2.0 リリースに含まれると思います。

于 2012-12-13T16:07:50.210 に答える