以前总觉得配置nginx这种问题看看网上教程就行了自己配置的时候才发现有些问题真的不是看一篇两篇教程就能搞定的 所以自己写一个备忘的配置流程 说不定什么时候就用上了。
对于 nginx 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密。但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 。这里我们使用自己生成的CA来生成证书。
CA与自签名
制作CA私钥
openssl genrsa -out ca.key 2048
制作CA公钥/根证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
Common Name 随意填写;其它可以填”.”
服务器端证书
制作服务器私钥
openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key
生成签发请求
openssl req -new -key server.pem -out server.csr
Common Name填写访问服务器时域名,配置nginx时用到,不能与CA的相同 其它填写”.”
用CA签发证书
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
客户端证书
制作私钥
openssl genrsa -out client.pem 1024
openssl rsa -in client.pem -out client.key
生成签发请求
openssl req -new -key client.pem -out client.csr
Common Name填写访问服务器时域名,配置nginx时用到,不能与CA的相同 其它填写”.”
用CA签发
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
配置NGINX
Ssl_certificate : 服务器公钥地址
Ssl_certificate_key : 服务器私钥地址
Ssl_client_certificate : CA公钥地址 验证客户端证书是否是同一CA签发
Ssl_verify_client : on 打开双向认证
配置好后 重新加载NGINX : service nginx reload
测试时可以在/etc/hosts 中添加 127.0.0.1 uuid.v1
测试
curl --insecure --key client.key --cert client.crt 'https://uuid.v1'
收到百度网页信息 成功!!
参考:
https://www.cnblogs.com/UnGeek/p/6049004.html
https://blog.csdn.net/zhangyong125/article/details/49949863