目录
1 创建证书
1.1 验证 openssl
1.2 创建私钥
1.3 私钥免密
1.4 申请证书
1.5 签署证书
2 使用证书
2.1 安装 docker
2.2 下载 nginx 镜像
2.3 启动 nginx 容器
2.4 编辑 conf 配置
2.5 配置 nginx 容器
2.6 热启动 nginx
2.7 设置本地 dns
2.8 验证证书
1 创建证书
1.1 验证 openssl
首先验证 openssl 是否安装。
openssl version
1.2 创建私钥
openssl genrsa -des3 -out server.priv.key 2048
该命令有两个作用。第一:生成长度为 2048(bit long)的非对称私钥;第二:将非对称私钥再经过对称加密算法 des3 二次加密后生成 server.priv.key 文件。
1.3 私钥免密
执行上步操作会被要求输入密码,为了后续操作方便,执行如下命令去除密码。
openssl rsa -in server.priv.key -out server.key
1.4 申请证书
openssl req -new -in server.key -out server.csr -subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=zcy/OU=Arch/CN=zcy.jiuxi.org"
就像你去银行申请银行卡要填写申请单和设置交易密码一样,上面的命令是向 CA(证书签发机构,我们这里是 openssl ) 提交一个网站证书的申请,申请内容是你的个人信息(比如:国家/省/市/单位/部门/网站域名)和私钥信息。
参数说明:
字段值 |
字段含义 |
范例 |
/C= |
Country(国家) |
CN |
/ST= |
State(省) |
Zhejiang |
/L= |
Location(市) |
Hangzhou |
/O= |
Organization(企业) |
zcy |
/OU= |
Organization Unit(部门) |
Arch |
/CN |
Common Name(域名或者IP均可) |
zcy.jiuxi.org |
上面最重要的参数就是CN,也就是域名,你就是为该域名去申请证书,至于其他参数,你想填就填,可以随风一点。
1.5 签署证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
上面命令会生成一个符合 X.509 规范的证书。X.509 是一种标准,该标准定义了证书中应该包含哪些信息,比如版本号、序列号、签名算法、颁布者、有效期、公钥、公钥算法、签名值等。虽然你打开 cert.crt 证书查看是一堆看不懂的乱码,但实际这些乱码的内容就是我上述描述的 x.509 证书所规定的要填写的那些内容。
自此,zcy.jiuxi.org 这个域名的证书申请和签发过程就已经全部完成了。在该过程中,你用 openssl 演了一出戏,自己向自己申请,自己给自己签发,有点过家家的感觉。在生产环境上,你可不能这么任性和随风,需购买和使用权威机构认证和颁发的证书。不能自己随便瞎签,否则很容易被你深爱的领导轻松完爆。
2 使用证书
接下来用 nginx 启动 web 服务(zcy.jiuxi.org),并将上面申请的证书与该服务域名进行绑定。nginx 运行在 Docker 容器中。
2.1 安装 docker
请参阅本人的《Docker 一分钟轻松完爆》来安装 Docker。
2.2 下载 nginx 镜像
docker pull nginx:1.16
2.3 启动 nginx 容器
docker run -itd --name nginx -p 443:443 --rm nginx:1.16
2.4 编辑 conf 配置
新建 default.conf 文件,添加 nginx server 证书信息:
server {
listen 443 ssl;
server_name zcy.jiuxi.org;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
2.5 配置 nginx 容器
将配置文件 default.conf、server.crt (证书)和 server.key (私钥)拷贝进容器。
docker cp server.key nginx:/etc/nginx
docker cp server.crt nginx:/etc/nginx
docker cp default.conf nginx:/etc/nginx/conf.d
2.6 热启动 nginx
docker exec -it nginx /bin/bash
执行上面命令登录 nginx 容器,然后在容器中热启动 nginx:
nginx -s reload
2.7 设置本地 dns
编辑 /etc/hosts 文件,根据个人具体情况指定 dns 信息。
127.0.0.1 zcy.jiuxi.org
2.8 验证证书
打开 safari 浏览器,本人是 mac 电脑。输入 https://zcy.jiuxi.org:
选择“显示详细信息”按钮,如下图所示:
点击“查看此证书”,可以看到x509证书的信息格式以及你的申请信息:
查看完证书信息后,点击“访问此网站”:
选择“访问网站“按钮,并输入你个人 mac 的使用密码:
操作完成后,轻松完爆自签名证书的认证:
打开你的“钥匙串访问”,搜索 zcy,发现你自签证书已经被添加: