本文介绍自签名的证书方式,与签名相关的文件包括:
- 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,认证客户端
}