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
举报

© 著作权归作者所有


1