大道至简,知易行难
广阔天地,大有作为

Nginx双向证书校验(服务器验证客户端证书)

1、创建Root CA私钥
openssl genrsa -out root-ca.key 1024

2、创建Root CA证书请求
openssl req -new -out root-ca.csr -key root-ca.key

3、签发Root CA根证书
openssl x509 -req -in root-ca.csr -out root-ca.crt -signkey root-ca.key -CAcreateserial -days 3650

5、生成服务器私钥
openssl genrsa -out server.key 2048

6、生成服务器证书签名请求
openssl req -new -out server.csr -key server.key
Common Name注意使用服务器的域名

7、使用Root CA签发服务器证书(Root CA证书、Root CA私钥、服务器CSR)
openssl x509 -req -in server.csr -out server.crt -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -days 3650

8、生成客户端私钥
openssl genrsa -out client.key 2048

9、生成客户端证书签名请求
openssl req -new -out client.csr -key client.key

10、签发客户端证书(Root CA证书、Root CA私钥、服务器CSRc)
openssl x509 -req -in client.csr -out client.crt -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -days 3650

11、客户端证书转为p12格式(p12格式才能导入浏览器)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

全过程:

Nginx验证客户端证书(使用OpenSSL生成自签名证书)

Nginx验证客户端证书(使用OpenSSL生成自签名证书)

然后配置Nginx:

此时若不设置客户端证书访问会报错“No required SSL certificate was sent”,我们可以先使用curl进行验证(–insecure标识忽略服务器端证书校验,否则自签名证书会报错):

curl使用客户端证书

curl使用客户端证书

如果是通过Chrome访问则是:

No required SSL certificate was sent

No required SSL certificate was sent

此时我们在Chrome中导入客户端证书,设置-高级-管理证书:

Chrome导入客户端证书0

Chrome导入客户端证书0

然后将其导入“个人”:

Chrome导入客户端证书1

Chrome导入客户端证书1

并在“高级”中勾选“客户端身份验证”的用途:

Chrome导入客户端证书2

Chrome导入客户端证书2

然后重启Chrome,再次访问时将被提示选择证书:

Chrome选择客户端证书

Chrome选择客户端证书

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » Nginx双向证书校验(服务器验证客户端证书)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址