基本概念
证书类别
- 根证书:生成服务端证书,客户端证书的基础。自签名。
- 服务端证书:由根证书签发。配置在服务器上。
- 客户端证书:由根证书签发。配置在浏览器、移动APP等客户端上。
认证方式
-
单向认证(Client鉴权Server)
1、Client发送连接请求
2、Server端将Server证书发送给Client
3、Client使用CA根证书对Server证书进行鉴权
-
双向认证
1、单向鉴权(Client鉴权Server)
2、单向鉴权(Server鉴权Client)
证书文件
- .key:私有的密钥
- .csr:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
- .crt:证书文件,certificate的缩写
- .crl:证书吊销列表,Certificate Revocation List的缩写
- .pem:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
- .p12 或者 .pfx:用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目
证书生成
Windows上可使用Git自带的OpenSSL生成,打开Git Bash
Linux本身自带OpenSSL
根证书
1、 生成CA私钥
openssl genrsa -out ca.key 2048
2、生成证书请求文件
openssl req -new -key ca.key -out ca.csr
需要输入证书信息,参考如下:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:GZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
Organizational Unit Name (eg, section) []:DEV
Common Name (e.g. server FQDN or YOUR name) []:ROOT
Email Address []:xxx@sina.com
3、生成自签名CA根证书(有效期365天)
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
服务端证书
1、生成私钥,需要设定密码
openssl genrsa -des3 -out server.key ***
2、生成证书请求文件,需要输入上一步的密码
openssl req -new -key server.key -out server.csr
需要输入证书信息,最重要的一行是Common Name (e.g. server FQDN or YOUR name),您需要输入与服务器关联的域名,或者是您服务器的公共IP地址,参考如下:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:GZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
Organizational Unit Name (eg, section) []:DEV
Common Name (e.g. server FQDN or YOUR name) []:10.10.8.8
Email Address []:xxx@sina.com
3、生成服务端证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
这一步可能会提示错误:
解决办法,使用如下命令创建文件:
mkdir -p demoCA/newcerts
touch demoCA/index.txt
touch demoCA/serial
echo “01” > demoCA/serial
客户端证书
1、生成私钥,需要设定密码
openssl genrsa -des3 -out client.key 1024
2、生成证书请求文件,需要输入上一步的密码
openssl req -new -key client.key -out client.csr
注意输入的信息不要和服务端证书的一样,否则会报 ERROR:There is already a certificate for XXX 问题,比如我这里的Common Name不一样:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:GZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HW
Organizational Unit Name (eg, section) []:DEV
Common Name (e.g. server FQDN or YOUR name) []:MY
Email Address []:xxx@sina.com
3、生成客户端证书
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
证书导出
有时需要用到pem或pfx格式的证书,可以用以下方式生成
生成pem格式证书
cat client.crt client.key > client.pem
cat server.crt server.key > server.pem
生成pfx(p12)格式证书
openssl pkcs12 -export -in client.crt -inkey client.key -out client.p12
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12