Java 如何使用我自己的CA证书在stunnel和Android应用程序之间建立TLS连接
我已使用以下配置在服务器上运行:Java 如何使用我自己的CA证书在stunnel和Android应用程序之间建立TLS连接,java,android,ssl,ssl-certificate,stunnel,Java,Android,Ssl,Ssl Certificate,Stunnel,我已使用以下配置在服务器上运行: [myservice] accept = 12345 connect = 9999 verifyPeer = yes cert = /etc/stunnel/stunnel.pem CAfile = /etc/stunnel/androidApp.crt cert和CAfile均由同一个私人CA颁发 我想在stunnel(在端口12345上)和我的Android应用程序之间实现安全通信。此外,我希望stunnel验证对等方(其证书与stunnel的证书由同一C
[myservice]
accept = 12345
connect = 9999
verifyPeer = yes
cert = /etc/stunnel/stunnel.pem
CAfile = /etc/stunnel/androidApp.crt
cert
和CAfile
均由同一个私人CA颁发
我想在stunnel(在端口12345上)和我的Android应用程序之间实现安全通信。此外,我希望stunnel验证对等方(其证书与stunnel的证书由同一CA颁发),另一方面,Android应用程序还应验证stunnel(服务器)部分的身份
在我的应用程序中,我有以下代码
/。。。
InputStream caInputStream=ctx.getResources().openRawResource(R.raw.android_应用程序)//PKCS12
密钥库;
KeyManagerFactory KeyManagerFactory;
SSLContext SSLContext;
SSLSocketFactory SSLSocketFactory;
插座;
keyStore=keyStore.getInstance(“PKCS12”);
load(caInputStream,“password”.toCharArray());
keyManagerFactory=keyManagerFactory.getInstance(“X509”);
init(keyStore,“password”.toCharArray());
sslContext=sslContext.getInstance(“TLS”);
sslContext.init(keyManagerFactory.getKeyManagers(),null,SecureRandom.getInstance(“SHA1PRNG”);
sslSocketFactory=sslContext.getSocketFactory();
socket=sslSocketFactory.createSocket(“主机名”,12345);
// ...
创建套接字时,我从stunnel获得以下日志:
2021.05.13 17:01:21 LOG5[2]: Service [myservice] accepted connection from XXX.XXX.XXX.XXX:YYYYY
2021.05.13 17:01:21 LOG6[2]: Peer certificate required
2021.05.13 17:01:25 LOG3[2]: SSL_accept: 1417C0C7: error:1417C0C7:SSL routines:tls_process_client_certificate:peer did not return a certificate
2021.05.13 17:01:25 LOG5[2]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
在这个阶段,我完全意识到我做了一些根本错误的事情(比如我没有发送对等证书),但我有点困惑如何做到这一点。你能帮我一下吗
干杯这是一个假设,但您正在打开的PKCS12文件似乎不包含私钥 添加私钥->创建CSR->使用CA签名->将链导入密钥存储
其他一切看起来都正常。谢谢,但PKCS12文件中确实包含了私钥。我仔细检查了一下:一个PKCS12文件用easy rsa导出为.p12格式,另一个用openssl导出(如下所示:)。这些都不管用。