自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x01 Nginx 配置 https单向认证》
上一篇文章我们介绍了如何自建私有化证书颁发机构(Certificate Authority,CA),本篇文章我们将介绍如何使用自建的CA颁发的证书来配置Nginx的https单向认证。为了方便环境的搭建,以下使用docker来搭建nginx https 环境。
docker 环境的准备
主机环境:
ifconfig |grep inet
inet 127.0.0.1 netmask 0xff000000
inet 192.168.1.12 netmask 0xffffff00 broadcast 192.168.1.255
inet 192.168.85.1 netmask 0xffffff00 broadcast 192.168.85.255
inet 192.168.22.1 netmask 0xffffff00 broadcast 192.168.22.255
当前主机有多个内网IP,我们可以用一张证书,包含多个IP,也可以用多张证书,每个IP对应一张证书。
这里我们使用单张证书
的方式。计划包含的IP如下:
- 127.0.0.1
- 192.168.1.12
- 192.168.85.1
- 192.168.22.1
新建一个测试目录,创建3个文件夹及docker-compose.yml文件,命令如下:
mkdir {html,conf.d,ssl}
touch docker-compose.yml
docker-compose.yml
的内容如下:
version: '2.1'
services:
nginx:
image: nginx
# restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./conf.d:/etc/nginx/conf.d:ro
- ./ssl:/etc/nginx/ssl:ro
其中目录分别为:
./html
为nginx的静态资源目录./conf.d
为nginx的配置文件目录./ssl
为nginx的证书目录。
创建nginx的配置文件./conf.d/default.conf
,内容如下:
server {
listen 80; # 监听 80 端口
listen 443 ssl; # 监听 443 端口,用于SSL
server_name _; # 默认主机名/域名,这里我们不设置域名,所以用下划线代替
ssl_certificate ssl/web.crt; # 导出的证书
ssl_certificate_key ssl/web.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 index.htm;
}
}
创建nginx的静态资源文件./html/index.html
,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>nginx https 单向认证</title>
</head>
<body>
<h1>nginx https 单向认证</h1>
</body>
</html>
证书的准备
创建密钥
私钥 - 创建密钥 - 输入内部名称 - 确定
创建证书
证书-创建证书
来源
选中【使用此CA证书进行签名】,并在后面下拉框选择你创建的CA
在【使用模版创建新证书】的下拉框中,选择 [default] TLS_server
主体
在主体选项卡里,填上一些信息:
- 内部名称:主要为了方便识别
- [countryName] 国家:填写你所在的国家,这里我们填写
CN
- [stateOrProvinceName] 省份:填写你所在的省份,这里我们填写
GuangXi
- [localityName] 地区:填写你所在的地区,这里我们填写
Nanning
- [organizationName] 组织:填写你所在的组织,这里我们填写
docker-nginx
- [organizationalUnitName] 组织单位:填写你所在的组织单位,这里我们填写
docker-nginx
- [commonName]通用名称:填写你的域名或者IP地址,这里我们填写
127.0.0.1
,如果证书只针对单个域名或IP,填这里就够了。 - [emailAddress] 电子邮件地址:填写你的邮箱地址,这里我们填写
taills@qq.com
在私钥下拉框中,选择我们上一步创建的私钥。
扩展
这里我们需要扩展所有的IP地址,设置如上图所示
IP:127.0.0.1, IP:192.168.1.12, IP:192.168.22.1, IP:192.168.85.1
如果想使用域名,就选择DNS
类型。
密钥用法
选中 【TLS Web Server Authentication】,这里我们只需要用到这个。字面意思就是用于web服务器认证。
点击【确定】创建证书。
导出证书
选择我们创建的docker-nginx
证书,点击【导出】,导出crt
格式的证书。
相应的,我们导出名为docker-nginx
的私钥,导出PEM private(*.pem)
格式的私钥。
把导出的证书和私钥,放到我们的./ssl
目录下。分别重命名为web.crt
和web.key
。
其中:
web.crt
为证书web.key
为私钥
启动nginx
docker-compose up
测试访问
用 https 协议访问,内容正常显示且浏览器地址栏显示上锁了,说明配置成功。
查看证书详情,可以看到证书的信息。