使用openssl生成自签名证书并部署到nginx中

564次阅读
没有评论

共计 2800 个字符,预计需要花费 7 分钟才能阅读完成。

基本概念

日常测试时需要使用Https进行内网测试http2性能,以及模拟部署到线上的相关特性,构建内网域名网站等;

基本概念

  • CA:认证机构。有自己的证书,可以拿自己的证书给别人签名然后收钱,这个星球上的CA被几家说英语的人垄断了。在这里我们会虚拟出一个CA机构,然后用他来给自己的证书认证签名。
  • (网站)证书 :发送给客户端的证书,其中大部分是公钥。是一个包含自己网站的公钥、认证、签名等信息的文件。
  • (网站)私钥 :服务器留存的解密私钥(server)

注意区分 CA机构的证书(可以拿来给其他网站证书签名)和 自己网站的证书(不可以)

所用工具

openssl 自行安装

生成自己的CA根证书

生成 CA 私钥

首先生成自己的CA私钥 -out 后面为生成文件名称一般为key后缀 4096 指定生成私钥的长度 2048 , 4096 等, 建议使用 4096

# 生成ca私钥
openssl genrsa -out ca-private.key 4096

得到 ca-private.key 文件

根据私钥以及配置文件生成证书

ca.conf 配置

[ req ]
default_bits       = 4096 
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = CN # 国家两位代码
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = CHONGQING #省市州名称
localityName                = Locality Name (eg, city)
localityName_default        = CHONGQING # 地区名称
organizationName            = Organization Name (eg, company)
organizationName_default    = dorthl.io # 公司名称
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64 #通用名称长度
commonName_default          = ZHENG ZHI XIN # 通用名称 服务商名字 或者你的名字

根据配置文件生成证书

# 根据私钥生成ca证书签发请求
openssl req -new -sha256 -key ca-private.key -config ca.conf -out ca.csr
# 生成ca根据签发请求得到ca证书
openssl x509 -req -days 3650 -in ca.csr -signkey ca-private.key -out ca.crt

最终生成的证书 在Windows 中显示如下 使用openssl生成自签名证书并部署到nginx中

用自己的CA证书生成网站证书

生成网站证书私钥

# 生成需要签发的服务密钥
openssl genrsa -out dorthl.io-private.key 2048

现网站SSl证书一般私钥长度在 2048 故指定 2048

根据配置文件生成网站证书

dorthl.io.conf

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext # 拓展字段

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = CN # 国家两位代码
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = CHONGQING #省市州名称
localityName                = Locality Name (eg, city)
localityName_default        = CHONGQING # 地区名称
organizationName            = Organization Name (eg, company)
organizationName_default    = dorthl.io # 公司名称
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = *.dorthl.io # 指定颁发的域名 * 为通配

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = *.dorthl.io #指定域名dns解析记录匹配
DNS.2   = dorthl.io

执行签发

# 生成证书签发请求
openssl req -new -sha256 -key dorthl.io-private.key -config dorthl.io.conf -out dorthl.io.csr

# 用CA证书生成终端用户证书
openssl x509 -req -days 365 -CA ca.crt -CAkey ca-private-key.pem -CAcreateserial \
    -in dorthl.io.csr -extensions req_ext -extfile dorthl.io.conf -out dorthl.io.crt

部署需要文件

  • ca-private.key CA 证书密钥文件 妥善保存 如需再次签署需要使用到
  • ca.crt CA证书文件,需要安装到客户端操作系统的受信任的第三方证书颁发机构里面
  • dorthl.io-private.key,dorthl.io.crt 需要部署到服务器上面

niginx http2 ssl 部署示例配置

worker_processes  auto;

...

http{

    ... 

    server {
        listen       443 ssl http2;
        server_name  example.dorthl.io;

        keepalive_timeout   70;

        ssl_certificate             /etc/nginx/cert/dorthl.io.crt;
        ssl_certificate_key         /etc/nginx/cert/dorthl.io-private.key;

        ssl_protocols               TLSv1.3;
        ssl_ciphers                 EECDH+AESGCM:EDH+AESGCM;
        ssl_ecdh_curve              secp384r1;
        ssl_session_timeout         10m;
        ssl_session_cache           shared:SSL:10m;

        ...
    }

    ...
}

配置好 example.dorthl.io 的解析地址后 就可以在客户端访问了

客户端配置

客户端最开始访问的时候可能会出现如下错误提示

使用openssl生成自签名证书并部署到nginx中 以windows为例 需要将 ca.crt 安装到操作系统中 在windows中可直接双击打开 ca.crt 证书文件 点击安装证书 在证书导入中 要手动选择存储位置 保存在 受信任的根证书颁发机构使用openssl生成自签名证书并部署到nginx中

正文完
 2
太阳
版权声明:本站原创文章,由 太阳 2021-06-03发表,共计2800字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)