Centos 7创建自签名SSL证书
概述
OpenSSL 是一个开源命令行工具,用于执行各种与 SSL 相关的任务;本文介绍如何使用 OpenSSL 创建自签名证书。
注:本文所述的自签名证书在最新Mac OS系统上已经失效,因为最新Mac OS默认仅支持最新的 Ed25519 算法;详见:https://www.sidoc.cn/doc/287.html
创建配置文件
证书创建过程中需要多次填写配置信息,为了填写方便,此处预先将配置信息放在文件中,以便直接读取;如下:
vim ca.conf
内容如下:
[req]
distinguished_name = req_distinguished_name
## 配置基本信息
[req_distinguished_name]
countryName = CN ## 国家
countryName_default = CN
stateOrProvinceName = ShanXi ## 省
stateOrProvinceName_default = ShanXi
localityName = XiAn ## 市
localityName_default = XiAn
organizationName = Sidoc ## 组织或公司
organizationName_default = Sidoc
commonName = Sidoc ## 证书颁发者
commonName_default = Sidoc
创建私钥、证书签名请求、证书
1.0> 创建私钥
创建一个 2048 位 RSA 私钥 ( domain.key ) :
openssl genrsa -out domain.key 2048
2.0> 创建证书签名请求
签名请求 CSR 包含公钥、组织、国家等申请信息,CA机构收到 CSR 请求后,会使用自己的私钥签署 CSR,并生成 SSL 证书:
# 从配置文件中读取配置信息
openssl req -key domain.key -new -out domain.csr -config ca.conf
3.0> 创建自签名证书
自签名证书是使用私钥签名的证书,自签名证书可以像 CA 签名证书一样用于加密数据。
openssl x509 -signkey domain.key -in domain.csr -req -days 36500 -out domain.crt
注:-days选项指定证书有效天数,此处设为100年;
创建自签名的CA根证书
创建自签名的CA根证书时,需要设置证书密码;后续在签署其它证书时,需要验证此密码;
## 从配置文件中读取配置信息 openssl req -x509 -sha256 -days 1825 -newkey rsa:2048 -keyout rootCA.key -out rootCA.crt -config ca.conf
使用自签名根证书签署 CSR
创建一个包含以下内容的配置文本文件 ( domain.ext ):
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
## 配置域名和IP
[alt_names]
DNS.1 = sidoc.vip
DNS.2 = *.sidoc.vip ## 可以使用配符
DNS.3 = test.com
DNS.4 = *.test.com
## IP.1 = 127.0.0.1
注: DNS.1 ”字段应该是我们网站的域。
使用根 CA 证书及其私钥签署我们的 CSR ( domain.csr ):
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in domain.csr -out domain.crt -days 36500 -CAcreateserial -extfile domain.ext
注:-days选项指定证书有效天数,此处设为100年;
注:CA 签名的证书将位于domain.crt文件中。
查看证书信息
使用openssl命令以纯文本形式查看证书内容、有效期等:
openssl x509 -text -noout -in domain.crt
配置Nginx
1.0> 配置如下
server {
listen 443;
server_name test.com www.test.com;
# https
ssl on;
ssl_certificate /var/www/ssl/test.com/server.crt;
ssl_certificate_key /var/www/ssl/test.com/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# ....
}
server {
listen 80;
server_name test.com www.test.com;
return 301 https://$host$request_uri;
}
2.0> 重启Nginx
sudo systemctl reload nginx
安装自签名证书(Mac)
1.0> 双击桌面上的SSL证书,将其添加到钥匙串中
2.0> 在钥匙串中双击打开SSL证书,选择“始终信任”
3.0> 重启浏览器
安装自签名证书(Windows)
1.0> 在浏览器中打开SSL证书
2.0> 点击“复制到文件”以保存证书文件
3.0> 双击安装已只在的证书文件,安装过程中选择存储到“受信任的根证书颁发机构”
4.0> 重启浏览器
* 可通过证书管理器删除证书,通过 “开始 -> 运行certmgr.msc” 打开SSL证书管理器
certmgr.msc