以前总觉得配置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



 

ingress配置双向证书 nginx证书双向认证_ingress配置双向证书

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



 

ingress配置双向证书 nginx证书双向认证_nginx_02

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



 

ingress配置双向证书 nginx证书双向认证_服务器_03

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



这里指向百度



ingress配置双向证书 nginx证书双向认证_客户端_04




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'

ingress配置双向证书 nginx证书双向认证_客户端_05

收到百度网页信息 成功!!