负载均衡双向证书配置方法-阿里云开发者社区

开发者社区> 开发与运维> 正文

负载均衡双向证书配置方法

简介: 本文目的 本文主要介绍在使用负载均衡服务中相关证书的含义,以及上传、配置方法。 说明: 服务器证书是用于用户浏览器检查服务器送过来的证书是否是由自己信赖的中心所签发的,服务器证书需要上传到 SLB 控制台; CA 证书作用:服务器要求客户浏览器发送自己的证书,收到后服务器用 CA 证

本文目的

本文主要介绍在使用负载均衡服务中相关证书的含义,以及上传、配置方法。

说明

  • 服务器证书是用于用户浏览器检查服务器送过来的证书是否是由自己信赖的中心所签发的,服务器证书需要上传到 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 并回车后:

eb2e7667e05dfa7e4d44418081b5f58ab64ecb9f
private 目录下有 ca.csr 文件生成。


4 生成凭证 crt 文件

$ sudo openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt

控制台输出
b4640a534d30e336d0a7ff7e0902c05d8b5821c8
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

4a3826cc467093c257fdcb1995b12f0b7dd9881c
提示输入 pass phrase,即 client.key 的口令。将 3.2 步保存的 pass phrase 输入后并回车:
c47065cd7713d11a4d0d3a14b3eecd6d88be5c74
要求你输入和 2.3 步一样的那些问题。输入的内容要求完全一致。但 A challenge password 是客户端证书口令(请注意将它和 client.key 的口令区分开,这边设置密码为test),可以与服务器端证书或者根证书口令一致:  

06cecd6359378dfe3501d5b8cdd0063ede80c5cd

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"

输出 

4635e151b86699fa091a31c5565fcd04c1802cea
两次都输入 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

2237b7238650657a245922b373d6dbd543ea0f5f
要求输入 client.key 的 pass phrase,输入 2.3.2 步输入的 pass phrase 并回车后: 

4b17cb9a671ba29d9311de30cf122bafda6fe6e9
要求输入 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、双向认证,但是没有导入客户端证书,访问效果如下图。

827ececd4307e7659303b5ca8ee860ff259f61f6

2、客户端证书导入过程,在此省略。

主要过程为:

下载客户端证书-》双击运行-》输入证书密码-》选择导入证书存储位置-》完成。

重启浏览器测试。


3、双向认证,导入客户端证书,访问效果如下图。


ccaa23874872d0501f520ff0af3555a7fcff4ad61b449931e4004718cec5abe32a03b17c7abcfb7f


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章