本文目的
本文主要介绍在使用负载均衡服务中相关证书的含义,以及上传、配置方法。
说明:
- 服务器证书是用于用户浏览器检查服务器送过来的证书是否是由自己信赖的中心所签发的,服务器证书需要上传到 SLB 控制台;
- CA 证书作用:服务器要求客户浏览器发送自己的证书,收到后服务器用 CA 证书验证客户浏览器的证书(即 Client 证书),如果没有通过验证,拒绝连接,
- CA 证书在开启双向认证功能后也需要上传到 SLB 控制台,对于开启双向认证功能一般用户可以选择使用 openssl 生成自签 CA 证书和 Client 证书。
服务器证书的生成
服务器证书可以到云盾 证书服务 购买,也可以到其他服务商处购买。
创建一个新的 CA 证书
在 /root 目录下新建 ca 文件夹,进入 ca,创建几个子文件夹:
$ sudo mkdir ca
$ cd ca
$ sudo mkdir newcerts private conf server
newcerts 子目录将用于存放 CA 签署过的数字证书(证书备份目录);private 用于存放 CA 的私钥;conf 目录用于存放一些简化参数用的配置文件;server 存放服务器证书文件。
1. conf 目录新建 openssl.conf 文件
编辑其内容如下:
[ ca ]
default_ca = foo # The
default
ca section
[ foo ]
dir = /root/ca # top dir
database = /root/ca/index.txt # index file.
new_certs_dir = /root/ca/newcerts #
new
certs dir
certificate = /root/ca/
private
/ca.crt # The CA cert
serial = /root/ca/serial # serial no file
private_key = /root/ca/
private
/ca.key # CA
private
key
RANDFILE = /root/ca/
private
/.rand # random number file
default_days =
365
# how
long
to certify
for
default_crl_days=
30
# how
long
before next CRL
default_md = md5 # message digest method to use
unique_subject = no # Set to
'no'
to allow creation of
# several ctificates with same subject.
policy = policy_any #
default
policy
[ policy_any ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
localityName = optional
commonName = supplied
emailAddress = optional
|
2 生成私钥 key 文件
$ cd /root/ca
$ sudo openssl genrsa -out
private
/ca.key
输出
Generating RSA
private
key,
512
bit
long
modulus
..++++++++++++
.++++++++++++
e is
65537
(
0x10001
)
|
private 目录下有 ca.key 文件生成。
注:openssl 默认生成 512 位的。一般是用 2048 位的。
3 生成证书请求 csr 文件
$ sudo openssl req -
new
-key
private
/ca.key -out
private
/ca.csr
|
提示输入 Country Name,输入 CN 并回车后:
提示输入 State or Province Name (full name),输入 ZheJiang并回车后:
提示输入 Locality Name,输入 HangZhou并回车后:
提示输入 Organization Name,输入 Aliyun并回车后:
提示输入 Organizational Unit Name,输入 Dev 并回车后:
提示输入 Common Name,如果没有域名的话,输入 xxx.xxx.cn 并回车后:
提示输入 Email Address,输入 Aliyun@aliyun.com 并回车后:
提示输入 A challenge password,这个是根证书口令。输入 123456 并回车后:
private 目录下有 ca.csr 文件生成。
4 生成凭证 crt 文件
$ sudo openssl x509 -req -days
365
-in
private
/ca.csr -signkey
private
/ca.key -out
private
/ca.crt
|
控制台输出
private 目录下有 ca.crt 文件生成。
5 为我们的 key 设置起始序列号
$ sudo echo FACE > serial
|
可以是任意四个字符
6 创建 CA 键库
$ sudo touch index.txt
|
7 为 "用户证书" 的移除创建一个证书撤销列表
$ sudo openssl ca -gencrl -out /root/ca/
private
/ca.crl -crldays
7
-config
"/root/ca/conf/openssl.conf"
|
输出
Using configuration from /root/ca/conf/openssl.conf
|
private 目录下有 ca.crl 文件生成。
客户端证书的生成
创建存放 key 的目录 users
$ sudo mkdir users
|
位置 /root/ca/users。
为用户创建一个 key
$ sudo openssl genrsa -des3 -out /root/ca/users/client.key
1024
|
要求输入 pass phrase,这个是当前 key 的口令,以防止本密钥泄漏后被人盗用。两次输入同一个密码(比如我这里输入 123456),users 目录下有 client.key 文件生成。
为 key 创建一个证书签名请求 csr 文件
$ sudo openssl req -
new
-key /root/ca/users/client.key -out /root/ca/users/client.csr
|
提示输入 pass phrase,即 client.key 的口令。将 3.2 步保存的 pass phrase 输入后并回车:
要求你输入和 2.3 步一样的那些问题。输入的内容要求完全一致。但 A challenge password 是客户端证书口令(请注意将它和 client.key 的口令区分开,这边设置密码为test),可以与服务器端证书或者根证书口令一致:
users 目录下有 client.csr 文件生成。
使用我们私有的 CA key 为刚才的 key 签名
$ sudo openssl ca -in /root/ca/users/client.csr -cert /root/ca/
private
/ca.crt -keyfile /root/ca/
private
/ca.key -out /root/ca/users/client.crt -config
"/root/ca/conf/openssl.conf"
|
输出
两次都输入 y,users 目录下有 client.crt 文件生成。
将证书转换为大多数浏览器都能识别的 PKCS12 文件
$ sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12
|
要求输入 client.key 的 pass phrase,输入 2.3.2 步输入的 pass phrase 并回车后:
要求输入 Export Password,这个是客户端证书的保护密码(其作用类似于 3.3 保存的口令),在客户端安装证书的时候需要输入这个密码。我是输入client。
users 目录下有 client.p12 文件生成。
负载均衡配置证书
此处上传的为向证书服务商申请的服务器证书。
https://help.aliyun.com/document_detail/32336.html
https://help.aliyun.com/document_detail/32337.html
相关证书的FAQ
https://help.aliyun.com/document_detail/27661.html
双向认证FAQ
https://help.aliyun.com/document_detail/34952.html
这里需要配置的内容:
CA证书上传,即上传上述描述生成的CA根证书,即“2 创建一个新的 CA 证书”描述的内容。
客户端证书,是需要导入浏览器中,即“3 客户端证书的生成”描述的内容。
测试效果:
1、双向认证,但是没有导入客户端证书,访问效果如下图。
2、客户端证书导入过程,在此省略。
主要过程为:
下载客户端证书-》双击运行-》输入证书密码-》选择导入证书存储位置-》完成。
重启浏览器测试。
3、双向认证,导入客户端证书,访问效果如下图。