expressjs设置tls连接https nginx服务器请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了expressjs设置tls连接https nginx服务器请求相关的知识,希望对你有一定的参考价值。

如何设置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;  
}  
答案

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

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包解码上面的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设置tls连接https nginx服务器请求的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Mongoose 连接设置 TLS

expressJS 4.x + vhost + SSL / HTTPS

使用 TLSv1.3 时是不是可以为 TLS 连接设置设置密码套件?

未设置 set_tls_init_handler 时 websocketpp 如何处理连接?

通过任何 SSL 或 TLS 版本的 HTTPS 连接

设置和验证 Python MySQL 连接中使用的 SSL/TLS 版本