当前位置: 首页 > 面试题库 >

在Android上使用自签名证书创建SSL-Socket

翟兴邦
2023-03-14
问题内容

我正在尝试将Android应用连接到使用自签名证书的启用SSL的服务器。我已经阅读了数十个教程,并且该应用程序现在正在接受证书并连接到服务器,但是我再也收不到任何数据。

我用来初始化套接字的原始代码是这样的:

//passphrase for keystore
char[] keystorePass="password".toCharArray();

//load own keystore (MyApp just holds reference to application context)
KeyStore keyStore=KeyStore.getInstance("BKS");
keyStore.load(MyApp.getStaticApplicationContext().getResources().openRawResource(R.raw.keystore),keystorePass);

//create a factory
TrustManagerFactory     trustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);

//get context
SSLContext sslContext=SSLContext.getInstance("TLS");

//init context
sslContext.init(
    null,
    trustManagerFactory.getTrustManagers(), 
    new SecureRandom()
);

//create the socket
Socket socket=sslContext.getSocketFactory().createSocket("hostname",443);
socket.setKeepAlive(true);

之后,接收器线程的运行循环使用 socket.getInputStream()
访问输入流。只要我使用未加密的连接,它就可以正常工作。但是安全连接不会从套接字 检索任何数据
。我已经通过将日志消息添加到接收循环来验证了这一点,甚至使用OpenSSL的s_server进行了检查。我从客户端检索数据,但客户端从未收到发送给它的任何内容。

作为最后的测试,我尝试像这样打开与www.google.com:443的连接:

javax.net.SocketFactory fact=SSLSocketFactory.getDefault();
Socket socket=fact.createSocket(_config.getUri().getHost(), _config.getUri().getPort());

仍然是相同的结果,连接有效,但是使用InputStream时,我没有从服务器收到任何消息。

有人有想法吗?

编辑:

我目前不允许回答我自己的问题,但是答案是这样的:恩,问题出在接收循环上。我依赖于InputStream.available()获取要读取的字节数,但没有意识到它是非常不可靠的(对于SSL套接字始终返回0)。因此,我将接收循环切换为使用阻塞read()


问题答案:

如上所述:原来问题是接收循环。我依赖于InputStream.available()获取要读取的字节数,但没有意识到它是非常不可靠的(对于SSL套接字始终返回0)。因此,我将接收循环切换为使用阻塞read()



 类似资料:
  • 我正在遵循这些准则使用OpenSSL生成自签名证书。 有人有办法解决这个问题吗?该文件存在,并且其在conf文件中的路径名正确...

  • 我想生成一个自签名SSL证书,并将其与Tomcat一起使用。 我怎么能这样呢?

  • 我正在为嵌入式Linux设备添加HTTPS支持。我尝试通过以下步骤生成自签名证书: 这是可行的,但我得到一些错误,例如,谷歌Chrome:

  • 背景:我需要在Windows Azure上测试WebRole的httpsendpoint。为此,我需要上传一个自签名证书,将证书的指纹添加到Webrole的配置中,最后将endpoint与配置的证书相关联。 我使用创建了一个自签名证书,该证书可通过Visual Studio命令提示符获得。我使用了以下命令: 命令成功,我可以将证书文件上载到Windows Azure托管服务。但部署WebRole失

  • 我最近升级了Inteliij IDEA 2019.2,如果我尝试从IDE中提取Git,我会发现以下错误:无法访问'https://github.xxx.com/app-Hello-USD/DGS.git/“:SSL证书问题:证书链中的自签名证书。 有人能帮我什么选项,我必须启用。 谢谢

  • 问题内容: 当尝试使用其PHP库通过Twilio发送消息时,我正在为这个错误而苦苦挣扎: 我在Windows 7上使用了wamp。 我当然找到了所有其他有关证书错误的信息。据我所知,通常更新或添加文件即可解决该问题。但是,即使这样做,我仍然遇到相同的错误。 就像这里所做的健全性检查一样,这正是我所做的: 从此处下载了最新的证书:http : //curl.haxx.se/ca/cacert.pem