📜  如何处理Android应用程序中的SSL(HTTPs)认证路径异常?

📅  最后修改于: 2022-05-13 01:55:24.632000             🧑  作者: Mango

如何处理Android应用程序中的SSL(HTTPs)认证路径异常?

如果在连接到 SSL 服务器 (HTTPS) 的系统上运行由您创建的Java程序时,如果您没有被下面提到的异常所困扰,请准备好在您的开发生涯中的某个时候遇到糟糕的经历。

为了将上述问题联系起来,我们想强调一些您可能会创建除 Android、Tomcat 服务器和 JavaFX 之外的Java应用程序的场景。

  1. 为产品或公司开发机器人时。
  2. 一个 Android 应用程序,需要从服务器检索数据并将其放置在每个构建的资产文件夹中。
  3. 根据您的需要创建文件解析器。
  4. 我正在从事计算机视觉项目。
  5. 我正在从事机器学习项目。
  6. 制作Java库

使用 SSL 进行身份识别和加密的服务器会提供已由可信赖的第三方(例如 Verisign、GoDaddy 和其他一些公司)验证的证书。浏览器或Java客户端可以使用此证书来确保它们与正确的站点(它声称的站点)而不是重定向的代理站点进行通信。如果我们使用浏览器访问一个站点,这个阶段非常明显,因为如果 SSL 证书不在浏览器的受信任存储中,它会提示我们添加它,它会被添加。但是,当我们使用Java程序访问安全站点时,这个阶段的 SSL 握手对用户是不可见的。



证书在哪里验证?

证书使用 JRE 的 trustStore 进行验证。这个 trustStore 位于 JDK 安装目录中,该目录被Java HOME ($ Java HOME/jre/lib/security) 引用,并且经常被称为“cacerts”。如果安全站点提供的证书存在于 JRE 的 trustStore 中,则会创建 SSL 连接;但是,如果证书不存在, Java将抛出异常(如上所述),我们需要将该证书添加到 trustStore 以解决该问题。

该程序尝试使用 OkHttp 对 https://httpbin.org/get URL(httpbin 是一个开源项目)进行 API 调用,然后使用 Gson 将返回的 JSON 解析为Java POJO 模型类对象。我创建了一个 JsonParser 类来使解析变得简单和通用。现在我们已经建立了Java应用程序中可能出现此问题的场景,让我们看看如何解决它。如前所述,该站点的 SSL 证书必须添加到 JRE 的 trustStore。要将 SSL 证书添加到 JRE 的 trustStore,请按照下面概述的步骤进行操作。

第 1 步:获取站点的 SSL 证书

第一步是获取站点的 SSL 证书。为此,请启动终端并导航到保存证书的位置。证书存储在桌面目录中。

openssl s_client -connect :443 -servername  > 

要退出,请在命令后按 ctrl + z。在任何文本编辑器(例如 sublime)中查看文件的内容。它将包括发行机构的名称、密钥、加密技术和其他信息。

第 2 步:现在我们将证书,即 cacerts,放在密钥库中。运行下面的命令来完成这个

sudo keytool -import -keystore cacerts -alias  -file 

它会询问您两次密码,一次是 sudo,一次是密钥库。密钥库的默认密码是“changeit”。

按照此命令,它将验证证书,然后提示您进行确认。当提示“信任此证书”时,输入“y”。最后,它会输出“证书已上传到密钥库”。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!