簡體   English   中英

Node.js Express服務器中的SSL正在運行但無法正常工作

[英]SSL in node.js express server running but not working

我所擁有的是針對域名sat的webodo.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/進行訪問。

好的,如果您最終遇到這種情況,這里是可能的原因和解決方案。

注意:為了保持格式正確,我將鏈接和命令放在最后。

  1. 如果您嘗試使用給定的ca-bundle文件,請不要。 創建一個證書鏈。 向當局索取文件。
  2. 如果您100%確定* .key和* .crt是正確的文件,則它們的格式不正確。 [namecheap為我提供了正確的格式]。
  3. 要在不同端口上運行證書(證書可以是單個域),您需要使用nginx反向代理。 然后,您可以使用node.js和php以及其他任何東西。 這也是一種非常好的方法,因為您只能同時獲得兩者的最佳效果。

我由於鏈證書中的某些格式錯誤而陷入困境,該錯誤通過多余的空格來解決。

一些命令和資源

  1. 您可以在這里https://www.sslchecker.com/matcher檢查證書是否與CSR或私鑰匹配
  2. 創建鏈證書cat domain.crt COMODO_DV_SHA-256_bundle.crt >> domain_cert_chain.crt命令cat domain.crt COMODO_DV_SHA-256_bundle.crt >> domain_cert_chain.crt
  3. nginx配置文件應該是這樣的。

注意:在node.js目錄中創建一個index.html文件(可以為空白)。 將apache配置為僅在localhost的端口8080上運行將節點配置為僅在localhost的端口3030上運行重啟apache節點和nginx nginx反向代理指南https://www.digitalocean.com/community/tutorials/how-to-configure-nginx -as-A-反向代理換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 

希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM