MeterSphere配置HTTPS客户端证书

一、HTTPS认证概念

1. HTTPS及单双向认证介绍
HTTP是超文本传输协议,它是基于TCP/IP协议,通过客户端和服务器之间的请求和响应进行数据交换。HTTP是一种无状态协议,每个请求都是独立的,服务器并不知道请求的上下文关系。
HTTPS(安全超文本传输协议)是在HTTP协议的基础上增加了SSL/TLS加密技术,使数据在传输过程中更加安全。HTTPS使用了公钥加密和私钥解密的方式,保证数据传输的机密性、完整性和可信性。HTTPS是HTTP协议的安全版。
单向认证只对通信某一方的身份合法性进行认证,例如在web应用中客户端在与服务端进行通信的时候,只要求对服务端的身份进行认证(这就要求服务端必须有一个CA证书,以供检验)。适用于用户数目广泛,且无需在通讯层对用户身份进行验证的场景。
双向认证要求通信双方要相互验证身份,要求通信双方都要有CA证书。例如在企业的应用服务之间存在调用关系的时候,可能需要对通信双方做身份验证。

2. HTTPS单双向认证流程
单向认证流程:


整个单向认证流程需要两个证书文件:
服务器端公钥证书:server.crt
服务器端私钥文件:server.key

双向认证流程:


整个双向认证的流程需要六个证书文件:
服务器端公钥证书:server.crt
服务器端私钥文件:server.key
根证书:root.crt
客户端公钥证书:client.crt
客户端私钥文件:client.key
客户端集成证书(包括公钥和私钥,用于浏览器访问场景):client.p12

二、使用MeterSphere校验客户端证书

1. 使用openssl工具生成HTTPS双向认证证书

  • 生成自签名根证书
#创建根证书私钥
openssl genrsa -out root.key 1024
#创建根证书请求文件
openssl req -new -out root.csr -key root.key
#创建根证书
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
  • 生成服务端证书
#生成服务器端证书私钥
openssl genrsa -out server.key 1024
#生成服务器证书请求文件
openssl req -new -out server.csr -key server.key
#生成服务器公钥证书
openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
  • 生成客户端证书
#生成客户端证书密钥
openssl genrsa -out client.key 1024
#生成客户端证书请求文件
openssl req -new -out client.csr -key client.key
#生成客户端证书
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
#生成客户端P12格式证书,需要输入一个密码
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

2. 配置Nginx双向认证

server块中参考以下配置:

## Settings for a TLS enabled server.

server {
listen       443 ssl http2;
listen       [::]:443 ssl http2;
server_name  _;
root         /usr/share/nginx/html;
#配置服务端证书,所有证书文件建议放在Nginx文件夹下,避免SELINUX导致的证书文件读取错误
ssl_certificate /etc/nginx/SSL/server.crt;
#配置服务端秘钥
ssl_certificate_key /etc/nginx/SSL/server.key;
#配置客户端证书用于验证客户端合法性
ssl_client_certificate /etc/nginx/SSL/client.crt;
#配置客户端证书为受信任的证书
ssl_trusted_certificate /etc/nginx/SSL/client.crt;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout  10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#开启客户端证书校验
ssl_verify_client on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

配置完成后重启Nginx服务。

3. MeterSphere测试客户端证书
MeterSphere做为发起请求的客户端,单向认证时不需要配置证书,所以下面介绍MeterSphere配置HTTPS双向认证客户端SSL证书的过程。

  • 上传证书
    在“项目设置”-“运行环境”-“证书配置”中上传证书,支持p12,jks,pfx格式,上传时需要填写证书密码。


    P12格式是基于PKCS#12标准而设计的证书格式,常用后缀有.p12和.pfx,分别用于Windows和macOs操作系统。
    JKS格式是基于Java Key Store(JKS)标准而设计的证书格式,通常用于Java语言的开发和运行环境中。

  • 发起请求
    未配置客户端证书时请求报错:


    配置客户端证书后正常响应:

2 个赞