>

익스프레스에 SSL 서버가 있는데, 일부 브라우저에는 체인 인증서가 필요하기 때문에 사용자가 웹 사이트를 수동으로 신뢰하지 않는 한 모든 브라우저에서 작동하지는 않습니다 (우리는 자체 중간 인증서가 있음). 중간 및 체인 인증서를 하나의 .crt 파일에 넣었습니다. 체인 + 중간 인증서는 INT_CERT_FILE 에 있습니다.  변하기 쉬운. 작동하지 않는 것 같습니다. http://www.digicert.com/help 를 사용하고 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는 ID를 인식하지 못하므로 수동으로 신뢰해야합니다. 이 문제를 어떻게 해결할 수 있습니까?

감사합니다,


  • 답변 # 1

    중간 인증서 파일에 여러 인증서 블록이 포함되어 있습니까?

    이런 경우에는 다른 파일로 분할하여 하나씩 읽어야합니다. 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) {
        // ...
    });
    
    

  • 답변 # 2

    서버에서 SSL 관련 파일을 실제로 수정할 수없는 경우 작은 스 니펫- "ssl chain"파일을 직접 분할 할 수 있습니다. SSL과 작동하도록 Node 및 socket.io를 가져 오려고 시도하는 동안 잠시 동안 (클라이언트에서 net :: ERR_INSECURE_RESPONSE 오류가 발생했습니다) 공유했습니다.

    var read = require('fs').readFileSync;
    var privateKey = read(MY_KEY_LOCATION, 'utf8');
    var certificate = read(MY_CERT_LOCATION, 'utf8');
    var chainLines = read(MY_CHAIN_LOCATION, 'utf8').split("\n");
    var cert = [];
    var ca = [];
    chainLines.forEach(function(line) {
      cert.push(line);
      if (line.match(/-END CERTIFICATE-/)) {
        ca.push(cert.join("\n"));
        cert = [];
      }
    });
    var credentials = {
      "key": privateKey,
      "cert": certificate,
      "ca": ca
    };
    var httpsServer = https.createServer(credentials, app);
    var io = require('socket.io').listen(httpsServer);
    
    

  • 이전 SVG 애니메이션 시퀀스를 반복하는 방법?
  • 다음 c# - List ForEach ForEach 메소드에서 요소 값 변경