我在我的局域网中托管一个nginx网络服务器,我想验证使用ssl客户端证书访问我的服务器的客户端 . 我在谷歌上生成一个自签名的SSL证书和一个客户端证书 . 但我无法验证拥有证书的客户端 . 我收到以下错误
从Firefox请求时:
2017/08/10 18:30:13 [info] 8994#0:* 4客户端在读取客户端请求头时没有发送所需的SSL证书,客户端:192.168.16.27,服务器:192.168.26.43,请求:“GET / hls1 / master.m3u8 HTTP / 1.1“,主机:”192.168.26.43“
当使用curl请求时:curl -v -s -k -key client.key --cert client.crt --cacert ca.crt https://192.168.26.43/hls2/master.m3u8
2017/08/10 18:30:33 [info] 8994#0:* 5客户端SSL证书验证错误:(18:自签名证书)读取客户端请求头时,客户端:192.168.16.27,服务器:192.168.26.43,请求:“GET /hls2/master.m3u8 HTTP / 1.1”,主持人:“192.168.26.43”
所以,我的问题是我可以使用自签名证书对客户端进行身份验证吗?如果是这样,任何人都可以提供实现此目的的步骤吗?
2 回答
我偶然发现了这个并发现了一个小陷阱,导致你遇到同样的错误:
有很多指南如何创建自签名客户端证书,我使用以下(改编自here):
但是,如果您对ca和客户证书使用相同的组织名称(例如,公司),您将看到上述错误!
如果
openssl verify -verbose -CAfile ca.crt client.crt
没有抱怨自签名证书,那么你很高兴 .服务器必须信任客户端证书 . 对于自签名证书,这意味着必须从客户端的密钥库导出证书并将其导入服务器的信任库 .
当服务器请求客户端证书时,它还会发送一个可信签名者列表,并且只允许客户端发送最终由其中一个签名者签名的证书 . 由于服务器没有将其作为可信签名者包含在内,因此客户端无法发送其证书 . 因此
client sent no required SSL certificate while reading client request headers
.