相关介绍
在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢?
所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:
- 使用数字证书能够提高用户的可信度
- 数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密
- 在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上
X.509证书包含三个文件:key,csr,crt。
- key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
- csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
- crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
创建CA
openssl 的配置文件:/etc/pki/tls/openssl.cnf
重要参数配置路径
dir = /etc/pki/CA # Where everything is kept
certs = /etc/pki/CA/certs # Where the issued certs are kept
database = /etc/pki/CA/index.txt # database index file.
new_certs_dir = /etc/pki/CA/newcerts # default place for new certs.
certificate = /etc/pki/CA/cacert.pem # The CA certificate
serial = /etc/pki/CA/serial # The current serial number
private_key = /etc/pki/CA/private/cakey.pem # The private key
创建所需要的文件
1 | touch /etc/pki/CA/index.txt 生成证书索引数据库文件 |
生成私钥
1 | cd /etc/pki/CA/ |
生成自签名证书
1 | openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem |
查看证书(Windows下查看生成的自签名证书,需要更改上述文件名后缀为.cer即可查看)
1 | openssl x509 -in /etc/pki/CA/cacert.pem -noout -text |
颁发证书
在需要证书的主机生成证书请求
如给nginx服务器生成私钥
1 | mkdir /root/key |
生成证书申请文件
1 | openssl req -new -key service.key -out service.csr |
同样提示输入国家,省,市等信息。注意:国家,省,公司名称三项必须和CA一致。主机名称必须和网站域名相同,如www.centos73.com。或者使用泛域名,即*.centos73.com,匹配所有
将证书文件移动到CA服务器/etc/pki/CA/csr目录下
1 | scp /app/service.csr 192.168.10.15:/etc/pki/CA/csr/ |
CA签署证书,并将证书颁发给请求者
1 | openssl ca -in /etc/pki/CA/crl/service.csr -out /etc/pki/CA/certs/service.crt -days 365 |
生成certs/service.crt和newcerts/xx.pem文件,两个文件相同。
查看证书中的信息
1 | openssl x509 -in certs/service.crt -noout -text|issuer|subject|serial|dates |
吊销证书
1 | (1)在客户端获取要吊销的证书的serial |
另外一种配置nginx自签名证书
生成私钥
1 | openssl genrsa -out server.key 2048 |
生成CSR
1 | openssl req -new -key server.key -out server.csr |
生成自签名证书
1 | openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt |
Nginx 配置文件
1 | [root@nginx logs]# cat /usr/local/nginx/conf/nginx.conf |