Nginx配置客户端(浏览器)SSL证书认证简明教程(自签名证书)

时间:2022-04-02 16:45:16

本文介绍自签名的证书方式,与签名相关的文件包括:

  • cer/crt:证书文件,Linux习惯用crt作为后缀,Windows用cer作为后缀。
  • key:私钥文件
  • csr(Certificate Signing Request):证书签名请求

创建CA根证书

CA证书用于签署客户端证书。

sudo openssl genrsa -des3 -out ca.key 4096
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt

创建的内容为:

  • ca.key:CA的密钥文件
  • ca.crt:CA证书文件

创建服务器证书

创建服务器的密钥文件和证书请求文件

sudo openssl genrsa -des3 -out server.key 1024
sudo openssl req -new -key server.key -out server.csr

使用CA签署服务器证书

sudo openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

创建的文件为:

  • server.key:服务器密钥文件
  • server.csr:服务器证书签名请求,此证书用于向CA请求签署服务器证书。
  • server.crt:有CA根证书签署的服务器证书。

创建客户端证书

创建客户端的密钥文件和证书请求文件

sudo openssl genrsa -des3 -out client.key 1024
sudo openssl req -new -key client.key -out client.csr

使用CA签署客户端证书

sudo openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

转换CA证书为PEM格式

sudo openssl x509 -in ca.crt -out ca.pem -outform PEM

因为在nginx的ssl_client_certificate需要pem格式

转换客户端证书格式

转换为pkcs12格式

pkcs12格式会把客户端的密钥文件(key)和证书文件(crt)打包在一起,后缀为.p12。

sudo openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

pkcs12这种格式被大部分浏览器支持安装。

转换为PEM编码

sudo openssl pkcs12 -in client.p12 -out client.pem -clcerts

Nginx配置

相关配置如下:

server {
    listen        443;
    ssl on;
    server_name example.com;

    ssl_certificate      /etc/nginx/certs/server.crt;
    ssl_certificate_key  /etc/nginx/certs/server.key;
    ssl_client_certificate /etc/nginx/certs/ca.pem;
    ssl_verify_client on;#可以设为on,认证客户端

}

相关问题参考:https://majing.io/posts/10000002871167