ExpressJS为请求设置TLS Connect HTTPS nginx Server



如何设置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连接。相反,您可以使用 x509 包从上面解码 x-ssl-cert 标头:

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

最新更新