expressjs设置TLS HTTPS连接的nginx服务器的请求(expressjs setti

2019-09-30 18:20发布

如何设置expressjs的要求,正确识别与HTTPS的nginx服务器TLS连接,这样我可以通过执行认证getPeerCertificate

这是我的nginx的配置传输请求expressjs API

location /api {

    proxy_pass http://10.88.132.14:4337/api;     

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;  
}  

Answer 1:

你需要通过SSL令牌,然后手动解码。 你通过它通过加入X-SSL-CERT$ssl_client_escaped_cert 。 请确保您使用的是Nginx的1.13或更高版本为$ssl_client_escaped_cert没有在1.12存在。

location /api {
    proxy_pass http://10.88.132.14:4337/api;     
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection 'upgrade';
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;  
    proxy_set_header    X-SSL-CERT $ssl_client_escaped_cert;
}

现在,您不能使用getPeerCertifice()因为这需要完整的SSL连接。 相反,您解码x-ssl-cert从上面使用header x509包:

let cert = req.headers['x-ssl-cert'];
try {
  cert = decodeURIComponent(cert);
  console.log(x509.getSubject(cert));
} catch (error) {
  console.log('Bad SSL-certificate?', error);
}


文章来源: expressjs setting tls connect https nginx server for request