2019-06-06-openssl生成自签名ssl证书及证书链制作

openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。

以下为测试正式生成过程而做的实验,基本模拟了整个证书的生成过程。

第一步,为服务器端和客户端准备公钥、私钥

生成服务器端私钥
命令:

openssl genrsa -out server_pri.key 1024

// 生成服务器端公钥

命令:

openssl rsa -in server_pri.key -pubout -out server_pub.pem

第二步,生成 CA 证书

// 生成 CA 私钥
命令:
openssl genrsa -out ca.key 1024

命令:
openssl req -new -key ca.key -out ca.csr

//会出来一个填写资料的界面,Common Name这一项,是最后可以访问的域名
命令:

openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

第三步,生成服务器端证书

// 服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件
命令:

openssl req -new -key server_pri.key -out server.csr

// 向自己的 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
命令:

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

同样会有信息填写,照旧写就好了

第四步,生成cer文件

//使用openssl 进行转换
命令:

openssl x509 -in server.crt -out server.cer -outform der

如果完成,就会得到这么9个文件

第五步 配置到服务器端nginx

server {
    listen 80;
    server_name www.cc.com;
    rewrite ^(.*)$ https://www.bb.com $1 permanent; 
}
server {
    listen 80;
    server_name www.bb.com;
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
}
server {
    listen 443;
    server_name www.test.com;
    ssl on;
    ssl_certificate /data/csr/server.crt;
    ssl_certificate_key /data/csr/server_pri.key;
    location / {
        root /data/bb;
        index  index.html index.htm;
    }
}

解决证书链问题

证书链可以有任意环节的长度,所以在三节的链中,信任锚证书CA 环节可以对中间证书签名;中间证书的所有者可以用自己的私钥对另一个证书签名。CertPath API 可以用来遍历证书链以验证有效性,也可以用来构造这些信任链。

Web 浏览器已预先配置了一组浏览器自动信任的根 CA 证书。来自其他证书授权机构的所有证书都必须附带证书链,以检验这些证书的有效性。证书链是由一系列 CA 证书发出的证书序列,最终以根 CA 证书结束。

我们一般会有三种证书: RootCA.crt(rCA,被信任的根证书)、IntermediateCA.crt(mCA,某些厂商有多个中间证书)、server.crt(sCA,通过CSR签下来的证书)

为了让浏览器能够信任我们的证书,我们需要配置一条完整的证书链,证书链由sCA和mCA构成就好,rCA是浏览器内置,不需要服务器给提供。

nginx配置证书链的时候,就是指定一个证书文件,这个文件中含有我们整个证书链的所有证书就好,证书合并的时候,正确的合并方法是把 mCA 合并到 sCA 中。当有多个 mCA 文件时,mCA 从下级到上级(根证书为最上级)依次合并到 sCA 中。

-----BEGIN CERTIFICATE-----
...... sCA ......
------END CERTIFICATE------
-----BEGIN CERTIFICATE-----
...... mCA (lower) ......
------END CERTIFICATE------
-----BEGIN CERTIFICATE-----
...... mCA (upper) ......
------END CERTIFICATE------
-----BEGIN CERTIFICATE-----
[ROOT CERTIFICATE]
-----END CERTIFICATE-----

转载于:https://www.jianshu.com/p/ca82b03d7d54

猜你喜欢

转载自blog.csdn.net/weixin_34008933/article/details/91140948