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