20

Godaddy からの証明書で SSL サーバーを動作させるのに問題があります

Express の使用: 3.1.0

この下では、ローカルで生成された/go daddy によって署名されていないキー/crt で動作します (ブラウザーは文句を言いますが、例外を追加すると動作します。

var http = require('https');    
var privateKey  = fs.readFileSync('/var/www/dev/ssl/server.key').toString();
    var certificate = fs.readFileSync('/var/www/dev/ssl/server.crt').toString();
    var credentials = {key: privateKey, cert: certificate};
    var https = http.createServer(credentials, app);

Godaddy を使用すると、追加のファイル gd_bundle.crt が提供されます。これは、このように実装すると思われますが、エラーが発生します

var http = require('https');
    var privateKey  = fs.readFileSync('/var/www/prod/ssl/mysite.key').toString();
    var certificate = fs.readFileSync('/var/www/prod/ssl/mysite.com.crt').toString();
    var ca = fs.readFileSync('/var/www/prod/ssl/gd_bundle.crt').toString();
    var credentials = {key: privateKey, cert: certificate, ca: ca};
    var https = http.createServer(credentials, app);

この構成では、エラー 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL プロトコル エラーが発生します。

正直なところ、私は開発者が作成しているキー/証明書を作成していないと言われています...ゴッドダディのものを間違って実装している場合、または彼がキー/crtファイルを正しくセットアップする方法がある場合、どのようにトラブルシューティングできるかわかりません....

露骨に明らかに間違っているものを見た人はいますか?

4

4 に答える 4

28

ノードでは、CA チェーン内の各証明書を配列で個別に渡す必要があります。 gd_bundle.crtおそらく次のようになります。

-----BEGIN CERTIFICATE-----
MIIE3jCCA...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEADCCA...
-----END CERTIFICATE-----

各証明書は独自のファイル (つまりgd1.crtgd2.crt) に入れ、個別に読み取る必要があります。

https.createServer({
    key: fs.readFileSync('mysite.key'),
    certificate: fs.readFileSync('mysite.crt'),
    ca: [fs.readFileSync('gd1.crt'), fs.readFileSync('gd2.crt')]
});
于 2013-04-25T21:39:56.197 に答える
11

GoDaddy にSHA-1 署名の ssl 証明書を要求し、バンドル ファイルを 2 つのファイルに分割します。このように...

あなたからgd_bundle.crt

-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8
-----END CERTIFICATE-----

gd_bundle_01.crt

-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-----END CERTIFICATE-----

gd_bundle_02.crt

-----BEGIN CERTIFICATE-----
56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldX
RQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8
-----END CERTIFICATE-----

次に、サーバーでこれを行います

var fs = require('fs'),
    https = require('https');

var ssl = {
    key: fs.readFileSync('./ssl/server.key', 'utf8'),
    cert: fs.readFileSync('./ssl/server.crt', 'utf8'),
    ca: [fs.readFileSync('./ssl/bundle_01.crt', 'utf8'),
         fs.readFileSync('./ssl/bundle_02.crt', 'utf8')]
};

https.createServer(ssl, function(req, res) {
    //... your code here ...
}).listen(443);
于 2014-06-23T17:06:12.533 に答える
3

よりシンプルに

さまざまな環境で同じアプローチを維持できるのに、GoDaddy の CA バンドルだけに限定する必要はありません。たとえば、dev env には 2 つのファイルしか必要ありませんが、本番環境では GoDaddy 証明書を使用しており、多くのファイルがあるため、どうすればよいですか?

GoDaddy の場合、バンドルを取得して 1 つのファイルに追加し、拡張子に PEM と名前を付け、すべての種類の証明書に対してかなり標準的なアプローチを提供するキー ファイルに名前を付けます。

次に、すべての環境に対してこれを行うだけです。

server = https.createServer({           
    key: fs.readFileSync(config.sslKey),
    cert: fs.readFileSync(config.sslCert),
},app).listen(config.sslPort);

GoDaddy cert.pem ファイルで、証明書とバンドル ファイルを 1 から x (上から下) に配置するだけで、次のようになります。

-----BEGIN CERTIFICATE-----
site certificate goes here
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
CA 1 goes here
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
CA 2 goes here
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
CA X goes here
-----END CERTIFICATE-----

必ずしも良いとは限りませんが、私はそれを好みます。Express 3.x では、CA アレイ ルートを実行する必要があることに遭遇しませんでしたが、特定のバージョンでは間違っている可能性があります。

于 2015-02-10T02:42:37.220 に答える
3

最近、node.js サーバーの 1 つで、Godaddy の SSL 証明書に関して同様の問題が発生しました。私の場合、PHP の curl 関数を使用して SSL を検証するサーバーの 1 つに問題がありました。

CSR を Godaddy に送信するときに、SHA-1 署名アルゴリズムを選択する必要があったことがわかりました。古いシステムとの互換性が高いと思います。

于 2014-03-08T00:18:00.557 に答える