使用libevhtp搭建HTTPS SERVER(双向验证身份)

本文主要介绍使用libevhtp搭建一个HTTPS SERVER的方法,非加密的HTTP SERVER搭建方法,请点击此处 (本文的构建环境继承自该博客)。

本文将针对“双向验证身份”场景,介绍HTTPS SERVER的搭建方法。“单向验证身份”的场景,请点击此处

1. 双向验证身份

有的时候,客户端通过输入账号和密码向服务器端展示自己的身份的方式太过繁琐,尤其是在客户端并不是一个人、而只是一个程序的时候。这种情况下,我们希望客户端与服务端双方都利用一个身份证(certificate)通过SSL/TLS协议向对方展示自己的身份。

根据单向身份验证的方法,如果让通信双方互相交换身份证,就可以实现互相验证了,但是如果一个分布式系统里有多方都需要进行通信, 如果任意两方都要交换身份证的话就太麻烦了。所以,我们通常创建一个自签署的根身份证(root CA),然后用它来签署分布式系统中各方的身份证,这样每一方都只要有这个根身份证,即可验证所有其他的通信方了。

我们可以通过以下步骤搭建双向验证身份的HTTPS SERVER。在本文中,我们将使用一个CA来签署HTTPS服务器的身份证。

1.1 创建CA

1. 创建我们自己CA的秘钥对(RSA)文件:

openssl genrsa -out "ca-key.pem" 2048

2. 创建我们自己CA的身份证申请(CSR)文件,并且用CA自己的私钥自签署该CSR,得到CA的身份证:

openssl req -x509 -new -key ca-key.pem -days 365 -out ca-crt.pem -subj "/CN=we-as-ca"

通过上述步骤,我们可以得到了自己CA的秘钥对文件和证书文件。

1.2 使用CA签署服务器的证书文件

1. 生成服务器的秘钥对(RSA)文件:

openssl genrsa -out server-key.pem 2048

2. 生成服务器的身份证申请(CSR)文件:

openssl req -new -key server-key.pem -out server-csr.pem -subj "/CN=192.168.213.133"  

3. 使用前面生成的CA签署服务器的证书(CRT)文件:

openssl x509 -req -in server-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out server-crt.pem -days 365

经过上述步骤,我们得到了HTTPS服务器的秘钥文件server-key.pem和经过CA签署的服务器证书文件server-crt.pem。

说明:上述步骤中的参数需要根据实际情况进行调整。

1.3 使用CA签署客户端的证书文件

1. 生成客户端的秘钥对(RSA)文件:

openssl genrsa -out client-key.pem 2048

2. 生成客户端的身份证申请(CSR)文件:

openssl req -new -key client-key.pem -out client-csr.pem -subj "/CN=192.168.213.129" 

3. 使用前面生成的CA签署客户端的证书(CRT)文件:

openssl x509 -req -in client-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out client-crt.pem -days 365

经过上述步骤,我们得到了连接HTTPS服务器的客户端的秘钥文件client-key.pem和经过CA签署的客户端证书文件client-crt.pem。

说明:上述步骤中的参数需要根据实际情况进行调整。

1.4 调用libevhtp接口,构建HTTPS服务器

本文的HTTPS服务器代码及程序使用“单向验证身份”场景的内容,请前往该文章查看。

1.5 测试HTTPS服务器

打开一个终端,运行生成的HTTPS服务器程序,如下:

./https_server -cert cassl/server-crt.pem -key cassl/server-key.pem -ca cassl/ca-crt.pem -verify-peer -verify-depth 2 -enforce-peer-cert

在上述命令中,我们通过指定相关参数(-verify-peer),要求服务器对客户端进行认证,即实现双向认证场景。

在客户端机器上,打开一个终端,使用curl命令测试HTTPS服务器,如下:

curl https://192.168.213.133:4443/ -k --key cassl/client-key.pem --cert cassl/client-crt.pem

上面的curl命令的执行结果如下:


如果客户端的终端中出现上述信息,说明双向身份验证的HTTPS服务器部署成功了。

说明:curl的-k选项会允许curl执行不安全的SSL连接和数据传输,使用-k选项时,客户端将不再检查“签署https server身份证的CA身份证”。所以,前面的curl测试命令也可以换成如下命令:

curl https://192.168.213.133:4443/  --cert cassl/client-crt.pem --key cassl/client-key.pem --cacert cassl/ca-crt.pem

上述的curl命令中添加了“--cacert”选项,去掉了“-k”选项。该命令的执行结果如下:


客户端的终端中出现了上述信息,说明双向身份验证的HTTPS服务器部署成功了。

猜你喜欢

转载自blog.csdn.net/liitdar/article/details/80255117