【问题标题】:SSL in node.js express server running but not workingnode.js 中的 SSL 表示服务器正在运行但无法正常工作
【发布时间】:2015-11-10 09:20:23
【问题描述】:

我拥有的是一个用于域 sat webadd.in 的 Commodo Positive SSL SHA-2 证书

http://namecheap.com 提供给我的三个文件

webadd_in.crt
webadd_in.p7b
webadd_in.ca-bundle

我的 main.js 文件

var express = require('express');
var fs = require('fs');
var app = express();
var bodyParser = require("body-parser");
var https          =         require("https");
app.use(bodyParser.urlencoded({ extended: false }));

var config     = {
  key: fs.readFileSync('/etc/ssl/ssl.key/webadd_in.in.key'),
  cert: fs.readFileSync('/etc/ssl/ssl.crt/webadd_in.ca-bundle') //insert the the .ca-bundle file here
};
var port = 443;
app.set('port', port);

require('./routes')(app);
var server = https.createServer(config, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

我的代码运行但没有任何输出。没有错误没有警告什么都没有。 如果我删除 ssl 部分并更改端口,它会起作用

我在这台服务器上有 apache,但我有 a2dismod ssl 并且端口 443 确实是免费的

另外我想知道我是否可以在 443 以外的端口上运行这个节点服务器,以便我可以像这样访问它https://webadd.in:3030/

【问题讨论】:

    标签: node.js apache ssl


    【解决方案1】:

    好的,如果您最终遇到这种情况,这里有可能的原因和解决方案。

    注意:为了保持格式正确,我在最后放置了链接和命令。

    1. 如果您尝试使用给定的 ca-bundle 文件,请不要这样做。创建证书链。向当局索取文件。
    2. 如果您 100% 确定 *.key 和 *.crt 是正确的文件,则它们的格式不正确。 [namecheap 为我提供了更正的格式]。
    3. 要在不同的端口上运行证书(证书可以是单个域),您需要使用 nginx 反向代理。然后,您可以使用 node.js 和 php 以及任何其他东西。这也是一种非常好的方法,因为您只能获得两者的最佳效果。

    我被卡住了,因为链证书中的一些格式错误已通过额外删除空格解决。

    一些命令和资源

    1. 您可以在此处检查证书是否与 CSR 或私钥匹配 https://www.sslchecker.com/matcher
    2. 创建链证书的命令cat domain.crt COMODO_DV_SHA-256_bundle.crt >> domain_cert_chain.crt
    3. nginx 配置文件应该是这样的。

    注意事项: 在 node.js 目录中创建一个 index.html 文件(可以为空)。 将 apache 配置为仅在 localhost 上的端口 8080 上运行 将节点配置为仅在本地主机上的端口 3030 上运行 重启apache节点和nginx nginx反向代理指南https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-reverse-proxy-for-apache

    server {
      listen   80;
            listen 443;
            ssl off;
            server_name domain.in;
            ssl_certificate /etc/nginx/ssl/nginx_bundle.crt;
            ssl_certificate_key /etc/nginx/ssl/domain_in.key;
            root /var/www/html/;
            index index.php index.html index.htm;
            server_name domain.in;
            location / {
              try_files $uri $uri/ /index.php;
      }
      location ~ \.php$ {
              proxy_set_header X-Real-IP  $remote_addr;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header Host $host;
          proxy_pass http://127.0.0.1:8080;
      }
            location ~ /\.ht {
              deny all;
      }
    }
    server {
            listen 3035;
            listen 443;
            ssl on;
            server_name domain.in;
            ssl_certificate /etc/nginx/ssl/nginx_bundle.crt;
            ssl_certificate_key /etc/nginx/ssl/domain_in.key;
            root /var/www/domainnodeapi/;
            index index.html index.htm;
            access_log /var/log/nginx/nginx.vhost.access.log;
            error_log /var/log/nginx/nginx.vhost.error.lo;
            client_max_body_size 10G;
            location / {
                proxy_pass http://127.0.0.1:3030;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_buffering off;
           }
     }
    
    1. 重启nginx、apache的命令

    sudo nginx -s 重新加载
    sudo 服务 nginx 重启
    sudo 服务 apache 重启

    使用 pm2 作为节点

    如果遇到错误

    nginx: [emerg] PEM_read_bio_X509_AUX("/etc/nginx/ssl/domain.crt") 失败 (SSL:)

    这是因为括号中的文件。检查格式错误。

    如果您收到 openssl 错误/版本未知/找不到文件:

    sudo apt-get purge openssl libssl-dev
    sudo apt-get install openssl libssl-dev
    

    希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 2017-06-02
      • 2016-03-11
      相关资源
      最近更新 更多