如何在Android上接受Java中的自签名证书?
代码示例将是完美的.
我在互联网上随处可见,虽然有些人声称已找到解决方案,但它要么不起作用,要么没有示例代码来支持它.
我正在构建一个简单的应用程序监视器来轮询我们的一个API URL并向我们发送电子邮件,如果它无法从响应中获取HTTP 200状态代码(这表明我们的API因某种原因而关闭).
我正在使用HttpClient 4.1(这很重要,因为它的API与3.x 差别很大).
我们的API使用SSL是安全的,但输入:
进入Web浏览器重定向到
没有造成任何错误.
当HttpClient尝试命中此URL(http://example.com/our-api)时,它会失败并显示javax.net.ssl.SSLPeerUnverifiedException一条消息,指出:
peer未经过身份验证
我看到这对其他人来说发生了很多事情,正如这篇文章所证明的那样(这也提供了一些规避这个问题的方法 - 我将在今晚尝试和实施的解决方案).
这个其他帖子(和其他类似的帖子)没有做的是解释为什么这首先发生!所以,而不是问"我该如何解决这个问题?" 我想我会问" 为什么会发生这种情况? "在我提前解决其中一个建议的解决方案之前,我想知道我试图解决的问题是什么;-)
我正试图用我的应用程序点击https网址.我已经按照本教程.我创建的商店有正确的CA. 但是,当我尝试建立连接时,我收到以下错误:
ERROR/IOException(1843): webPost: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
Run Code Online (Sandbox Code Playgroud)
我已经完成了一些有关此错误的阅读,人们决定允许他们的应用程序接受所有证书.我认为这不是真的可以接受.我应该检查一下,看看问题是什么?
我在一个只用于抓取公共数据的网络爬虫中使用Apache HttpClient.
我希望能够使用无效证书抓取网站,无论多么无效.
我的抓取工具不会传入任何用户名,密码等,也不会发送或接收敏感数据.
对于这个用例,我会抓取http一个站点的版本,如果它存在,但有时它当然不会.
如何使用Apache的HttpClient完成这项工作?
我尝试了一些像这样的建议,但是对于一些无效的证书,它们仍然失败,例如:
failed for url:https://dh480.badssl.com/, reason:java.lang.RuntimeException: Could not generate DH keypair
failed for url:https://null.badssl.com/, reason:Received fatal alert: handshake_failure
failed for url:https://rc4-md5.badssl.com/, reason:Received fatal alert: handshake_failure
failed for url:https://rc4.badssl.com/, reason:Received fatal alert: handshake_failure
failed for url:https://superfish.badssl.com/, reason:Connection reset
Run Code Online (Sandbox Code Playgroud)
请注意,我已经尝试了这个,我的$JAVA_HOME/jre/lib/security/java.security文件jdk.tls.disabledAlgorithms设置为空,以确保这不是一个问题,我仍然得到如上所述的失败.