如何处理安卓应用中的 SSL(HTTPs)认证路径异常?
原文:https://www . geesforgeks . org/如何处理-sslhttps-认证-路径-安卓应用中的异常/
如果您在连接到 SSL 服务器(HTTPS)的系统上运行由您创建的 Java 程序时没有被下面提到的异常刺痛,请在您的开发生涯中的某个时候为糟糕的体验做好准备。
异常 : PKIX 路径构建失败:sun . security . provider . cert path . suncertpathbuilder 异常:找不到指定目标的有效证书路径。
为了说明前面提到的问题,我们想强调几个场景,在这些场景中,您可以创建一个不同于安卓、Tomcat Server 和 JavaFX 的 Java 应用程序。
- 为产品或公司开发机器人时。
- 一个安卓应用程序,需要从服务器检索数据,并放在每个构建的资产文件夹中。
- 根据您的需要创建文件解析器。
- 我在从事计算机视觉项目。
- 我在做机器学习项目。
- 制作一个 Java 库
极客提示:如果 Java 程序试图连接到受 SSL 保护的服务器(HTTPS 站点),可能会出现上述异常。
利用 SSL 进行识别和加密的服务器会提供一个经过可信第三方(如 Verisign、GoDaddy 和其他一些公司)验证的证书。浏览器或 java 客户端可以使用该证书来确保它们与正确的站点(它声称是谁)通信,而不是与重定向的代理站点通信。如果我们使用浏览器访问一个站点,这个阶段是非常明显的,因为如果 SSL 证书不在浏览器的可信存储中,它将提示我们添加它,并且它将被添加。但是,当我们使用 Java 程序访问安全站点时,SSL 握手的这个阶段对用户来说是不可见的。
证书在哪里验证?
证书使用 JRE 的信任库进行验证。这个信任库位于 JDK 安装目录中,被 JAVA HOME($ JAVA HOME/JRE/lib/security)引用,通常被称为“cacerts”如果安全站点给出的证书存在于 JRE 的 trustStore 上,将创建一个 SSL 连接;但是,如果证书不存在,Java 将抛出一个异常(如上所述),我们需要将该证书添加到 trustStore 来解决这个问题。
极客提示:在使用“让我们加密”SSL 证书的服务器上,此问题更为常见。然而,因为我们是开源爱好者,我们会利用它,因为它是免费的。
该程序试图使用 OkHttp 对 https://httpbin.org/get URL 进行 API 调用(httpbin 是一个开源项目),然后使用 Gson 将返回的 JSON 解析为 Java POJO 模型类对象。我创建了一个 JsonParserclass,使解析变得简单和通用。现在我们已经建立了在 Java 应用程序中可能出现这个问题的场景,让我们看看如何解决它。如前所述,该站点的 SSL 证书必须添加到 JRE 的信任库。要将 SSL 证书添加到 JRE 的信任库,请遵循下面概述的过程。
第一步:获取站点的 SSL 证书
第一步是获取站点的 SSL 证书。为此,启动终端并导航到证书保存位置。证书存储在桌面目录中。
openssl s_client -connect <site-url>:443 -servername <site-url> > <saved-certificate-file-name-we-want-to-give>
要退出,请在命令后按 ctrl + z。在任何文本编辑器中查看文件内容(如崇高)。它将包括颁发机构的名称、密钥、加密技术和其他信息。
步骤#2:现在我们将证书(即 cacerts)放在密钥库中。运行以下命令完成此操作
sudo keytool -import -keystore cacerts -alias <alias-name> -file <certificate-file-path>
它会问你两次密码,一次是 sudo,一次是密钥库。密钥库的默认密码是“changeit”。
注意:如果输入“changeit”后提示输入新密码,请使用相同的“changeit”或更改密码并记住以备将来使用。
按照此命令,它将验证证书,然后提示您进行确认。当提示“信任此证书”时,输入“y”。最后,它将输出“证书已上载到密钥库。”
版权属于:月萌API www.moonapi.com,转载请注明出处