假设您有一个服务器 A 和一个客户端 B。
为了将服务器 A 配置为使用 TLS 相互身份验证机制,您的服务器必须有一个密钥对和一个“引用”来验证您的客户端 B,反之亦然。
现在,为了进行测试,您可以使用以下命令创建一个 CA(证书颁发机构)以供 serverA 使用:
[1] ~# openssl genrsa -out caServerA.key 1024
[2] ~# openssl req -new -key caServerA.key -out caServerA.csr
[3] ~# openssl ca -selfsign -keyfile caServerA.key -in caServer.csr -out caServerA.crt
为服务器 A 生成密钥对,并使用之前创建的 CA 对其进行签名:
[1] ~# openssl genrsa -out serverA.key 1024
[2] ~# openssl req -new -key serverA.key -out serverA.csr
[3] ~# openssl ca -keyfile caServerA.key -cert caServerA.csr -in serverA.csr -out serverA.crt
对客户端重复相同的过程。最后你必须有一些类似的东西:clientB.crt、clientB.key、caClientB.crt。
假设您的服务器是 apache2,因此您必须使用以下命令配置您的 https stuf:
[....]
SSLEngine on
SSLCertificateFile [path_to_your_certificate]/serverA.crt
SSLCertificateKeyFile [path_to_your_certificate]/serverA.key
# this because you have to trust all clients that have certificates signed by caClientB
SSLCACertificateFile [path_to_your_certificate]/caClientB.crt
# this will force server to verify client's identity/certificate
SSLVerifyClient require
[....]
重新启动您的服务器,它就可以对您的客户端进行身份验证了。
对于测试,使用 Web 浏览器连接到服务器更简单。但在此之前,您必须使用以下命令以 PKCS12 格式导出您的密钥对:
openssl pkcs12 -export -in clientB.crt -inkey clientB.key -out clientB.pkcs12
现在您可以在您喜欢的浏览器的“密钥管理系统”中导入此文件。连接到您的服务器,这将起作用。
您还可以在调试模式下激活 Loglevel 以获取更多详细信息。
希望能帮助到你 ...