1. CA与自签名
制作 CA 私钥:
cd /App/nginx/conf
mkdir -p ssl
openssl genrsa -out ca.key 2048
制作 CA 公钥/根证书:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=BeiJing/L=HaiDian/O=SHAREit Inc./OU=App/CN=root"
2. 服务器端证书
制作服务器端私钥:
openssl genrsa -out server.pem 2048
openssl rsa -in server.pem -out server.key
生成签发请求:
openssl req -new -key server.pem -out server.csr -subj "/C=CN/ST=BeiJing/L=HaiDian/O=SHAREit Inc./OU=App/CN=域名"
CN
为服务器的域名,不能与 CA
的相同。
用 CA 签发证书:
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
3. 客户端证书
制作私钥:
openssl genrsa -out client.pem 2048
openssl rsa -in client.pem -out client.key
生成签发请求:
openssl req -new -key client.pem -out client.csr -subj "/C=CN/ST=BeiJing/L=HaiDian/O=SHAREit Inc./OU=App/CN=域名"
CN
为服务器的域名,不能与 CA
的相同。
用 CA 签发:
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
如果是浏览器访问,需要将证书转换为 p12
格式,然后手动导入浏览器:
openssl pkcs12 -export -clcerts -in client.crt -inkey client.pem -out client.p12
4. Nginx 配置 server 段添加指令
ssl_verify_client on;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_client_certificate ssl/ca.crt;
5. 验证
curl --insecure --key client.key --cert client.crt 'https://域名'