Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用我自己的CA证书在stunnel和Android应用程序之间建立TLS连接_Java_Android_Ssl_Ssl Certificate_Stunnel - Fatal编程技术网

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导出(如下所示:)。这些都不管用。