本文主要记述在Linux系统上使用Openssl创建SSL证书的流程,作为个人学习笔记。自签名证书分为自签名私有证书和自签名CA证书两种。自签名私有证书无法被吊销,自签名CA证书可以被吊销。
OpenSSL为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用;openssl只是OpenSSL开源套件中的多功能命令工具;
OpenSSL套件的组成部分有:
1.libcrypto:通用功能的加密库;
2.libssl:用于实现TSL/SSL功能的库;
3. openssl:多功能命令工具。
1. 生成证书私钥(Key)
openssl genrsa -out /path/keyfile 2048
openssl rsa -in /path/keyfile -des3 -out /path/encrypted.key
openssl genrsa 加密方式 -out /path/keyfile 2048
2. 生成证书请求文件(Certificate Sign Request)
openssl req -new -key /path/keyfile -out /path/csrfile
3. 自签名,生成私有证书(Certificate)
openssl x509 -req -in /path/csrfile.csr -signkey /path/keyfile.key -out /path/ssl.crt
从生成私钥到自签名,生成私有证书,可以合并成一条命令:
openssl req -new -x509 -newkey rsa:2048 -keyout /path/server.key -out /path/server.crt
5. 查看证书信息
openssl x509 -in /path/certfile -noout -text
创建自签 CA 证书,主要分为两个部分: 创建CA 根证书及签发证书。
/etc/pki/CA/
newcerts 存放CA签署(颁发)过的数字证书(证书备份目录)
private 用于存放CA的私钥
crl 吊销的证书
/etc/pki/tls/
cert.pem 软链接到certs/ca-bundle.crt
certs/ 该服务器上的证书存放目录,可以存放自己的证书和内置证书
ca-bundle.crt 内置信任的证书
private 证书密钥存放目录
openssl.cnf openssl的CA主配置文件
可以在配置文件中配置默认值,这样就不用每次重新输入了。非必须操作。以下是配置文件可修改参数,都是原状态,本人没有修改。
default_md = default # use public key default MD
default_md = sha1
countryName_default = XX
stateOrProvinceName_default = Default Province
localityName_default = Default City
0.organizationName_default = Default Company Ltd
openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr
openssl x509 -days 3650 -in /etc/pki/CA/cacert.csr -req -signkey /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
2. 生成序列号和索引文件
准备好序列号和索引文件,不然以下操作会出错,也可以在创建根证书前准备好
touch /etc/pki/CA/index.txt
echo 00 > /etc/pki/CA/serial
openssl genrsa -aes256 -out /etc/pki/tls/private/privkey.pem 2048
openssl req -new -key /etc/pki/tls/private/privkey.pem -out /etc/pki/tls/certs/domain_name.csr
4. 签发证书
openssl ca -in domain_name.csr -out /etc/pki/tls/certs/domain_name.crt.pem -days 825
#如果不用系统自带目录结构,签发证书的命令如下
openssl x509 -req -days 365 -in /path/csrfile.csr -CA /path/ca.crt -CAkey /path/ca.key -set_serial 01 -out /path/csrfile.crt
Nginx配置文件如下设置
# HTTPS server
server {
listen 443 ssl http2 default_server;
server_name e-highwayapp.com;
ssl_certificate "/home/ds/nginx/server_certificates/ssl.globalsign.com.crt";
ssl_certificate_key "/home/ds/nginx/server_certificates/private.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
openssl verify -CAfile /path/ca.crt /path/server.crt
转换为P12证书
openssl pkcs12 -export -in /path/server.crt -inkey /path/server.key -out /path/server.p12
#获取要吊销的证书的serial
openssl x509 -in /path/x.crt -noout -serial -subject
#对比serial与subject 信息是否与index.txt中的信息一致
#如果一致,则可以吊销证书
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
#如果是第一次吊销证书,需要指定吊销的证书编号
echo 01 >/etc/pki/CA/crlnumber
#更新吊销证书列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem
#完成后,可查看吊销的证书列表
openssl crl -in /etc/pki/CA/crl.pem -noout -text
学习过程中参考了很多前辈文章:
https://www.jianshu.com/p/81dbcde4fd7c
https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6#%E9%8D%B5%E4%BD%9C%E6%88%90
https://qiita.com/tarosaiba/items/2ec41280d72b2e98b3bf
https://qiita.com/tarosaiba/items/9fa3320b633e0f5e87b5#4-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E5%81%B4%E3%81%AE%E8%A8%AD%E5%AE%9A