引用出处: https://blog.csdn.net/liuchunming033/article/details/48470575
证书生成基本步骤: 生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
CA根证书的生成步骤
生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)(CA给自已颁发的证书)。
- # Generate CA private key
- openssl genrsa -out ca.key 2048
- # Generate CSR
- openssl req -new -key ca.key -out ca.csr
- # Generate Self Signed certificate(CA 根证书)
- openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
在实际的软件开发工作中,往往服务器就采用这种自签名的方式,因为毕竟找第三方签名机构是要给钱的,也是需要花时间的。
用户证书的生成步骤
生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
下面生成服务端和客户端两个证书,用于双向认证
服务器端用户证书:
- # private key
- $openssl genrsa -des3 -out server.key 1024
- # generate csr
- $openssl req -new -key server.key -out server.csr
- # generate certificate
- $openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
如果签名失败,需要根据出错信息先配置openssl.conf文件, 并创建几个文件
客户端用户证书:
- $openssl genrsa -des3 -out client.key 1024
- $openssl req -new -key client.key -out client.csr
- $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
生成pem格式证书
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成
$cat client.crt client.key> client.pem
$cat server.crt server.key > server.pem
结果:
服务端证书:ca.crt, server.key, server.crt, server.pem
客户端证书:ca.crt, client.key, client.crt, client.pem
nginx配置
http{ #.... server { listen 80; listen 443 ssl; ssl_certificate /root/server.crt; ssl_certificate_key /root/server.key; } }
启动nginx时会让输入PEM密码,
客户端使用https协议发起请求 curl -k https://xxxx