如何在SSL中进行客户端身份validation

我试图通过SSL连接到我的服务器。 服务器和客户端使用Openssl成为可能。 我只是为了学习目的而编写的代码。 我为客户端和服务器做了自签名证书,我正在使用openssl s_client来testing我的服务器。

一切正常,没有客户端证书。 但是,当我给客户端证书与s_client它给了我错误。

# openssl s_client -connect localhost:443 -ssl3 -cert client.crt -key client.key CONNECTED(00000003) depth=0 /C=XX/ST=XXXX/L=XXXX/O=XXXX/OU=XXX/CN=SERV OWNER/[email protected] verify error:num=18:self signed certificate verify return:1 depth=0 /C=XX/ST=XXXXX/L=XXXX/O=XXXXXX/OUXXXXXXXX/CN=SERVOWNER/[email protected] verify return:1 2804:error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate:s3_pkt.c:1102:SSL alert number 42 2804:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:539: 

服务器同时提供以下错误

 2803:error:140890B2:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:no certificate returned:s3_srvr.c:2619: I got a connection from (127.0.0.1 , 48096) 

我在服务器上的客户端validation码是:

 if(verify_client == ON) { if (!SSL_CTX_load_verify_locations(ctx, RSA_SERVER_CA_CERT, NULL)) { ERR_print_errors_fp(stderr); exit(1); } SSL_CTX_set_verify(ctx,SSL_VERIFY_PEER,NULL); SSL_CTX_set_verify_depth(ctx,1); }