使用Openssl签发SSL证书

本文主要记述在Linux系统上使用Openssl创建SSL证书的流程,作为个人学习笔记。自签名证书分为自签名私有证书和自签名CA证书两种。自签名私有证书无法被吊销,自签名CA证书可以被吊销。

什么是openssl

OpenSSL为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用;openssl只是OpenSSL开源套件中的多功能命令工具;
OpenSSL套件的组成部分有:
1.libcrypto:通用功能的加密库;
2.libssl:用于实现TSL/SSL功能的库;
3. openssl:多功能命令工具。

生成自签名私有证书

1. 生成证书私钥(Key)

openssl genrsa -out /path/keyfile 2048

在这里插入图片描述
如果想对已生成的私钥加密:(以下命令是使用DES3加密)

openssl rsa -in /path/keyfile -des3 -out /path/encrypted.key

在这里插入图片描述
也可以在生成时直接加密(以下例子使用AES256)

openssl genrsa 加密方式 -out /path/keyfile 2048

使用Openssl签发SSL证书_第1张图片
2. 生成证书请求文件(Certificate Sign Request)

openssl req -new -key /path/keyfile -out /path/csrfile

使用Openssl签发SSL证书_第2张图片

  • 在输入域名时,需要多加注意,填写的域名必须是你要https方式访问的那个域名。如abc.com 或 web.abc.com, abc.com 和web.abc.com,www.abc.com都是不同的域名。
  • 在输入信息时,不要出现任何特殊字符,如:(~,%,^,$,@,#,&,!,等)。

3. 自签名,生成私有证书(Certificate)

openssl x509 -req -in /path/csrfile.csr -signkey /path/keyfile.key -out /path/ssl.crt

在这里插入图片描述
4. 命令合并

从生成私钥到自签名,生成私有证书,可以合并成一条命令:

openssl req -new -x509 -newkey rsa:2048 -keyout /path/server.key -out /path/server.crt

使用Openssl签发SSL证书_第3张图片

5. 查看证书信息

openssl x509 -in /path/certfile -noout -text

使用Openssl签发SSL证书_第4张图片

  • 以上例子中,文件夹为个人随意创建的,有些不妥,没有参考价值。

生成自签名CA证书

创建自签 CA 证书,主要分为两个部分: 创建CA 根证书及签发证书。
1. 创建CA根证书
可以使用openssl创建CA,用来签发证书,默认情况ubuntu和CentOS上都已安装好openssl。CentOS 6.x 上有关ssl证书的目录结构。
/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签发SSL证书_第5张图片

  • 生成根证书请求(与上面基本相同)
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.csr

使用Openssl签发SSL证书_第6张图片

  • 生成根证书
openssl x509 -days 3650 -in /etc/pki/CA/cacert.csr -req -signkey /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem

使用Openssl签发SSL证书_第7张图片

2. 生成序列号和索引文件

准备好序列号和索引文件,不然以下操作会出错,也可以在创建根证书前准备好

touch /etc/pki/CA/index.txt
echo 00 > /etc/pki/CA/serial

使用Openssl签发SSL证书_第8张图片
3. 创建需要认证的服务器证书
除路径外其他操作同上

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

使用Openssl签发SSL证书_第9张图片

在Nginx中使用证书

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签发SSL证书_第10张图片

CA证书的有效性验证

openssl verify -CAfile /path/ca.crt /path/server.crt

显示OK,说明有效。

证书格式转换

转换为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

你可能感兴趣的:(技术学习,openssl,ssl,ca证书,https,nginx)