node.js中的SSL表示服务器正在运行但无法运行

时间:2015-11-10 09:20:23

标签: node.js apache ssl

我所拥有的是域名的Commodo Positive SSL SHA-2证书 webadd.in

我有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/

那样访问它

1 个答案:

答案 0 :(得分:0)

好的,如果你最终遇到这样的情况,可能的原因和解决方案。

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

  1. 如果您尝试使用给定的ca-bundle文件,请不要。创建证书链。向当局索取文件。
  2. 如果您100%确定* .key和* .crt是正确的文件,则其格式不正确。 [namecheap为我提供了更正的格式]。
  3. 要在不同端口上运行证书(证书可以是单域),您需要使用nginx反向代理。然后你可以使用node.js和php以及任何其他东西。这也是一种非常好的方法,因为你只能获得最好的两种方法。
  4. 我因为链证书中的一些格式错误而被卡住了,这个错误是通过额外删除空格来解决的。

    一些命令和资源

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

      注释:      在node.js目录中创建一个index.html文件(可以为空)。      将apache配置为仅在localhost上的端口8080上运行      将节点配置为仅在localhost上的端口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
      2.   

        sudo nginx -s reload
             sudo service nginx restart
             sudo service apache restart
             
             使用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
        

        希望这会以某种方式帮助你。

相关问题