SSL 及其继任者 TLS 能够加密客户端与服务端的网络连接,保证网络传输信息的安全及完整性,不被他人窃取。有时我们会想要在本机测试加密网络连接,SSL 加密需要有一个 SSL 证书,我们可以为本机生成一个证书来测试。


Table of Contents

  1. 自签名的 SSL 证书
  2. 创建 RootCA 及自签名证书
    1. 生成 Root SSL 证书
    2. 信任 Root SSL 证书
    3. 生成 网站 SSL 证书
  3. 配置 Nginx 使用 SSL
  4. 参考

自签名的 SSL 证书

使用 OpenSSL 创建一个自签名的单域名和泛著名的 SSL 证书很容易,一行命令主就可以。假设我们为本地的多个项目添加了多个 .local 结尾的域名。

1
$ openssl req -x509 -nodes -days 1024 -newkey rsa:4096 -keyout local.key -out local.crt

运行后的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ openssl req -x509 -nodes -days 1024 -newkey rsa:4096 -keyout local.key -out local.crt
Generating a 4096 bit RSA private key
..........................................++
..............++
writing new private key to 'local.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:local
Organizational Unit Name (eg, section) []:local
Common Name (eg, your name or your server's hostname) []:local,*.local
Email Address []:me@amito.me

各选项含义比较明显,比较重要的是 Common Name, 这是与要用 SSL 加密的域名或服务器 IP 相关的。如果是单域名, 就填 local;要是有多个项目,就填 local,*.local。知道创建的过程后,就可以一行命令自动生成了。

1
$ echo -e "CN\nBJ\n\Beijing\nlocal\nlocal\nlocal,\*.local\nme@amito.me"|openssl req -x509 -nodes -days 1024 -newkey rsa:4096 -keyout local.key -out local.crt

这样我们就在当前目录生成了一个 ssl 证书 local.crt 和对应的密钥 local.key

创建 RootCA 及自签名证书

生成 Root SSL 证书

  1. 生成 Root Key
1
$ openssl genrsa -des3 -out RootCA.key 4096
  1. 生成 RootCA 证书
1
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

信任 Root SSL 证书

生成 网站 SSL 证书

配置 Nginx 使用 SSL

参考

  1. 如何为Nginx创建自签名SSL证书
  2. https学习笔记三----OpenSSL生成root CA及签发证书
  3. How to get HTTPS working on your local development environment in 5 minutes