4

GoDaddyでSSL証明書を購入し、次のnode.jsサーバーを使用してセットアップを試みています。

var https = require('https'),      // module for https
    fs =    require('fs');         // required to read certs and keys

var options = {
    key: fs.readFileSync('../../ssl/example.com.key'),
    cert: fs.readFileSync('../../ssl/example.com.crt'),
    ca: fs.readFileSync('../../ssl/gd_bundle.crt'),
    requestCert:        true,
    rejectUnauthorized: false
};

https.createServer(options, function (req, res) {
    if (req.client.authorized) {
        res.writeHead(200, {"Content-Type": "application/json"});
        res.end('{"status":"approved"}');
    } else {
        res.writeHead(401, {"Content-Type": "application/json"});
        res.end('{"status":"denied"}');
    }
}).listen(443);

サーバーを実行した後、 https://example.comのWebサイトにアクセスしようとしましたが、

{"status":"denied"}

応答があったので、これは正常に機能していると思いますが、SSLがどのように機能するかについての私の理解は間違っていると思います。ブラウザがサーバーから証明書を取得し、サーバーがルート証明書、つまりGoDaddyから証明書を認証すると思いました。だから私は得るべきではない

{"status":"approved"}

https://example.comにアクセスするだけですか?

だから私の質問は、https://example.comにアクセスして{"status": "authorized"}を取得するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

3

拒否される理由は、クライアント証明書認証を使用して認証しようとしているためです。各エンドユーザーには、サーバー証明書によって署名されたクライアント証明書が必要です。 ノードでクライアント証明書と証明書認証を設定する方法。

Webトラフィックを暗号化しようとしているだけの場合は、クライアント証明書は必要ありません。トラフィックを暗号化するだけの場合は、http://nodejs.org/docs/latest/api/https.htmlの例を使用してください。

于 2012-08-03T22:44:17.423 に答える
0

これは間違っています:

ca: fs.readFileSync('../../ssl/gd_bundle.crt')

ca個々の証明書を含む文字列またはバッファの配列である必要があります。バンドルを提供する場合、最初の証明書のみが使用され、残りは無視されます。

参照: http: //nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener

于 2015-01-14T15:19:57.180 に答える
0

1.)最初にcpanelを開きます2.)SSL / TLS 3.)SSLサイトを管理します。4.)sslを追加するドメインを選択します。5。)次に証明書による自動入力

ここでcrtとkeyを取得し、domain.pemとdomain.crtの2つのファイルを作成します。

crtコードをdomain.crtに配置し、キーコードをdomain.pemファイルに配置し、両方のファイルをメインルートに配置します

const https = require('http');
const fs = require('fs');


const httpsOptions = {
key: fs.readFileSync('domain.pem'),
cert: fs.readFileSync('domain.crt'),
ca: fs.readFileSync('domain.crt'),
passphrase: '??'
}

https.createServer(options, function (req, res) {
  if (req.client.authorized) {
    res.writeHead(200, {"Content-Type": 
    "application/json"});
    res.end('{"status":"approved"}');
  } else {
    res.writeHead(401, {"Content-Type": 
    "application/json"});
    res.end('{"status":"denied"}');
  }
}).listen(443);
于 2021-12-10T03:21:35.940 に答える