我在Express中有一个SSL服务器,该服务器不能在所有浏览器上运行(除非用户手动信任该网站),因为某些浏览器需要链证书(我们有自己的中间证书)。我已经将中间证书和连锁证书放在一个.crt文件中。链+中间证书在INT_CERT_FILE变量中。它似乎不起作用。我正在使用http://www.digicert.com/help并正在进行openssl s_client -connect tasker.adnxs.net:443 -showcerts | grep "^ "检查,但是它似乎没有返回中间+链证书。
INT_CERT_FILE
openssl s_client -connect tasker.adnxs.net:443 -showcerts | grep "^ "
这是我的设置方法:
var fs = require("fs"); var https = require("https"); var express = require("express"); var KEY_FILE = fs.readFileSync("path/to/key/file.key"); var CERT_FILE = fs.readFileSync("path/to/crt/file.crt); var INT_CERT_FILE = fs.readFileSync("path/to/intermediate and chain crt.crt"); var _app_https = express(); var _server_https = null; _server_https = https.createServer({ key: KEY_FILE, cert: CERT_FILE, ca: INT_CERT_FILE }, _app_https).listen(443);
在Firefox上访问它时,Firefox无法识别其身份,因此需要手动信任它。如何解决此问题?
谢谢,
您的中间证书文件是否包含多个证书块?
如果是这种情况,您应该将它们拆分为不同的文件,并一一读取。您可以将它们作为数组传递给ca参数。
ca
我已经将其与以下代码一起使用:
var https = require('https'), read = require('fs').readFileSync, httpsOptions = { key: read('ssl/mycertificate.key', 'utf8'), cert: read('ssl/mycertificate.crt', 'utf8'), ca: [ read('ssl/rapidssl_1.pem', 'utf8'), read('ssl/rapidssl_2.pem', 'utf8') ] }; https.createServer(httpsOptions, function (req, res) { // ... });