java - 如何在没有证书的情况下连接到 https 网络服务?

标签 java android ssl certificate

我需要为我的客户创建应用程序,应用程序的一部分使用 https 连接:

public static void getVersions() throws IOException, ParserConfigurationException, SAXException {

     URL u = new URL(VERSION_URL);
     HttpsURLConnection c = (HttpsURLConnection) u.openConnection();
     c.setRequestMethod("GET");
     c.setDoOutput(true);
     c.connect();
     InputStream in = c.getInputStream();

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     DocumentBuilder builder = null;
     builder = factory.newDocumentBuilder();                                   
     Document d = builder.parse(in);
}

但是当我尝试使用它时,我会得到 IO 异常:“没有受信任的证书 java”。这是我客户的服务,一切都是合法的。我该如何修复这个错误?

最佳答案

您可以将自定义服务器证书放在信任库中,并将其作为资源包含在您的应用程序中。

在创建到该服务器的 HTTPS 连接时,您可以指定此信任库包含受信任的证书。这可以通过创建自己的 SSLSocketFactory 来完成实例

KeyStore trusted = KeyStore.getInstance("BKS");
InputStream in = context.getResources().openRawResource(R.raw.mystore);
trusted.load(in, "mypassword".toCharArray());
in.close();
SSLSocketFactory mySslFact = new SSLSocketFactory(trusted);

另请参阅:How Can I Access an SSL Connection Through Android?

关于java - 如何在没有证书的情况下连接到 https 网络服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8020183/

相关文章:

.net - 使用自签名 SSL 证书的 SQL Server 加密。从 ASP.NET 3.5 查询

java - 如何安全地将字符串组合到文件路径并打开文件写入器?

Java swing,无法让文本字段按预期显示

android - 从 url 下载 PDF 文件并存储在内部存储中,然后尝试从任何 PDF 阅读器打开它,它显示的文件格式在 flutter 中不受支持

android - 为什么我的 Assets 文件夹没有安装在模拟器上?

apache - 极限挑战失败。来自 http ://service. domain1.com/.well-known/acme-challenge/xWsuGIi0JmuEuDzS5qPkVX3oHuzY2kNl0YGoU6HltRg 的无效响应

python - 在代理后面使用 pip 安装任何包时出现 SSL 问题

java - 为什么 if 语句后无法输入信息?没有错误显示

java - 如何打印带有空格的匹配数字的结果

Android WebView 未加载 URL