ssl 双向验证 Android,android上的双向SSL认证

我试图在Python服务器和Android客户端应用程序之间实现双向SSL身份验证。我可以访问服务器和客户端,并希望使用自己的证书实现客户端身份验证。到目前为止,我已经能够验证服务器证书并在没有客户端身份验证的情况下进行连接。在

客户端需要什么类型的证书?在握手过程中,如何让它自动发送到服务器?这是我目前为止得到的客户端和服务器端代码。我的方法错了吗?在

服务器代码while True: # Keep listening for clients

c, fromaddr = sock.accept()

ssl_sock = ssl.wrap_socket(c,

keyfile = "serverPrivateKey.pem",

certfile = "servercert.pem",

server_side = True,

# Require the client to provide a certificate

cert_reqs = ssl.CERT_REQUIRED,

ssl_version = ssl.PROTOCOL_TLSv1,

ca_certs = "clientcert.pem", #TODO must point to a file of CA certificates??

do_handshake_on_connect = True,

ciphers="!NULL:!EXPORT:AES256-SHA")

print ssl_sock.cipher()

thrd = sock_thread(ssl_sock)

thrd.daemon = True

thrd.start()

我怀疑我可能用错了认证文件。。。?在

客户代码

^{pr2}$

我已经使用openssl生成了一个客户端私钥、一个客户端证书、一个服务器私钥和一个服务器证书。然后我将客户机证书添加到keystore.bks(存储在/res/raw/keystore.bks)中,然后将服务器证书添加到truststore.bks

所以现在当客户机尝试连接时,我得到了一个错误服务器端:ssl.SSLError: [Errno 1] _ssl.c:504: error:140890C7:SSL routines:SSL3_GET_CLIENT_CERTIFICATE:peer did not return a certificate

当我尝试在android客户端中执行此操作时SSLSession s = mSSLSocket.getSession();

s.getPeerCertificates();

我得到这个错误:javax.net.ssl.SSLPeerUnverifiedException: No peer certificate

所以很明显,我使用的密钥库中似乎没有正确的对等证书,因此没有向服务器发送证书。在

我应该在密钥库中放些什么来防止这个异常?在

此外,这种双向SSL认证方法是否安全有效?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值