1. 生成ext文件
echo -e "[v3_req]\n"\
"authorityKeyIdentifier=keyid,issuer\n"\
"basicConstraints=CA:FALSE\n"\
"keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment\n"\
"subjectAltName = @alt_names\n"\
"\n"\
"[alt_names]" > v3.ext
2. 设定域名证书
echo DNS.1 = www.xxx.com >> v3.ext
请把上面 www.xxx.com
改成自己的需要生成服务器证书的域名
3. 生成根证书(ca)的RSA 密钥文件
openssl genrsa -out ca_private.key
4. 生成ca的证书请求文件
openssl req -new -key ca_private.key -out ca.req \
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=testo/OU=testg/CN=testca"
-subj
参数中填写的是证书信息
-
C
是国家编号, 2位数 -
ST
是省份 -
L
是城市名 -
O
是组织名 -
OU
是组名 -
CN
是证书拥有者名称
5. 生成ca根证书(自己给自己签证)
openssl x509 -req -days 3650 -sha256 -extensions v3_ca \
-signkey ca_private.key -in ca.req -out ca.cer
-days
是根证书的有效天数
-sha256
是采用sha256离散算法,谷歌浏览器不在支持sha1算法的安全提示,也即是说如果用sha1作为参数,谷歌浏览器可能显示为不安全
6. 生成服务器网站的SSL密钥
openssl genrsa -out server_private.key
7. 生成服务器网站的证书请求文件
openssl req -new -key server_private.key -out server.req \
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=demo/OU=demog/CN=xxx.com"
subj
的内容与#4一样,这里是网站使用者的证书信息
8.使用ca根证书生成服务器证书
openssl x509 -req -days 3650 -sha256 -extfile v3.ext -extensions v3_req \
-CA ca.cer -CAkey ca_private.key -CAserial ca.srl -CAcreateserial \
-in server.req -out server.cer
最后生成的文件如下:
-
v3.ext
用于生成服务器证书所需要的配置文件, 包含证书绑定的域名 -
ca_private.key
ca根证书的密钥 -
ca.req
生成ca根证书的请求文件 -
ca.cer
ca根证书 -
ca.srl
在使用ca根证书签证网站证书时自动生成的序列文件 -
server_private.key
服务器ssl证书的密钥 -
server.req
服务器证书生成的请求文件 -
server.cer
ca根证书签证的服务器网站的ssl证书
部署到nginx中只需要 server_private.key
和 server.cer
根证书 ca.cer
可以安装到本地操作系统中对网站的证书进行验证