Android HTTPS服务器 - 客户端身份验证自我证书

时间:2014-02-11 10:01:11

标签: java android openssl wget

我使用SSLServerSocket创建了一个Java(Android)服务器,其中包含自签名证书,我尝试使用wget连接到服务器:

wget https://myAndroidserver:8080 -v --ca-certificate=client.pem --no-check-certificate

但它会出现以下错误:

OpenSSL: error: 14094410: SSL routines: SSL3_READ_BYTES: SSLv3 handshake failure alert

我的Java应用程序中记录了以下错误:

error: 140890C7: SSL routines: SSL3_GET_CLIENT_CERTIFICATE: peer did not return a certificate (external/openssl/ssl/s3_srvr.c: 3271 0x5926f79c: 0x00000000)

如何解决?

2 个答案:

答案 0 :(得分:0)

如果我正确地阅读你的问题......

**server**:
OpenSSL: error: 14094410: SSL routines: SSL3_READ_BYTES: SSLv3 handshake failure alert

**client**:
error: 140890C7: SSL routines: SSL3_GET_CLIENT_CERTIFICATE: peer did not return a certificate (external/openssl/ssl/s3_srvr.c: 3271 0x5926f79c: 0x00000000)

端口8080上的服务器上没有运行SSL / TLS;或者没有提供证书。

您还可以使用带有s_client标记的OpenSSL -state来验证发送和接收的消息:

$ openssl s_client -connect encrypted.google.com:443 -state
CONNECTED(00000003)
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL_connect:SSLv3 read server hello A
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read server session ticket A
SSL_connect:SSLv3 read finished A

还有一个-debug标志,但它非常冗长且难以解码。如果您要执行调试跟踪,您可以使用Wireshark,因为它会中断消息中的所有字段。

答案 1 :(得分:0)

感谢您提供帮助。 要解决此问题,请按照此网站上的步骤click here创建密钥库以及客户端和服务器所需的所有文件,并使用bcprov-jdk16-1.45.jar创建密钥库(bks)并在客户端上使用此命令(wget) ):

 wget https://myserver:port  --certificate=client.pem --no-check-certificate --private-key=client_key.pem