NGINX 双认证
Posted 一笑而起
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX 双认证相关的知识,希望对你有一定的参考价值。
先说一下何为双向认证:
单项认证,是客户确定客户访问的网站是否正确,且数据加密交互服务端和客户端数据。
双向认证,是①客户确定访问的网站是否正确,证书是否和客户端存储的服务端证书匹配,②服务端也要确定客户是不是我认证的,允许访问的客户。双方都确定后身份正确后,在把数据加密传送。
双向认证一般用于企业之间,对安全要求比较高的情况下。比如目前的区块链互访等都是采用的这种方式。
单项认证和双向认证的区别可以参考如下截图(图片来源见文章最下方的链接)
证书生成方式:
1. 私钥:openssl genrsa -aes256 -out server-key.pem 4096
2. 自签证书:openssl req -new -x509 -days 3650 -key server-key.pem-sha256 -out server-cert.pem
注意,这里“Common Name”应为域名或者提供被访问的ip。和访问方式对应最好。
3. 客户端的私钥:openssl genrsa -aes256 -out client-key.pem 4096
4. echo'extendedKeyUsage = clientAuth' > extfile-client.cnf
openssl req -new-key client-key.pem -out client-cert.csr
opensslx509 -req -days 3650 -in client-cert.csr -signkey client-key.pem -outclient-cert.pem -extfile extfile-client.cnf
5. 将生成的server-cert.pem 和 client-cert.pem 双方互换
nginx 证书双认证方式的配置:
nginx作为服务端的配置:
ssl on;
ssl_certificate server-cert.pem;
ssl_certificate_key server-key.pem;
ssl_client_certificate client-cert.pem; #作为服务端,需要认证的是对方的客户端证书
ssl_verify_client on; # 开启双向认证
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_verify_depth 1; # 默认为1,设置客户端证书链的检查深度
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
nginx作为反向代理的配置:
server{
listen port;
location / {
proxy_ssl_certificate client-cert.pem;
proxy_ssl_certificate_key client-key.pem;
proxy_ssl_trusted_certificate server-cert.pem;# 对方提供的服务端证书;
proxy_ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_verify on;
proxy_ssl_verify_depth 1;
proxy_ssl_session_reuse off;
proxy_ssl_cliphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
proxy_pass https://***;
}
}
关于单项认证和双向认证的有关可以看看这篇博文:
http://blog.csdn.net/duanbokan/article/details/50847612
Http和Https的区别/握手协议/单双认证
https://blog.csdn.net/zxysshgood/article/details/79126735
以上是关于NGINX 双认证的主要内容,如果未能解决你的问题,请参考以下文章