原生Java发送Https请求

https协议相对于http而言其实只是多了一步证书验证的过程。这个证书正常情况下被jdk/jre/security/cacerts所管理。

里面证书包含两种情况:

1、机构所颁发的被认证的证书。这种证书的网站在浏览器访问时https头显示为绿色。

2、个人所设定的证书。这种证书的网站在浏览器里https头显示为红色×,且需要点击信任该网站才能继续访问。而点击信任这一步的操作就是我们在java代码访问https网站时区别于http请求需要做的事情。

 

所以JAVA发送Https请求有两种情况,三种解决办法:

第一种情况

Https网站的证书为机构所颁发的被认证的证书,这种情况下和http请求一模一样,无需做任何改变,用HttpsURLConnection或者HttpURLConnection都可以。

第二种情况

个人所设定的证书,这种证书默认不被信任,需要我们自己选择信任,信任的办法有两种:

A、将证书导入java的运行环境中

  1. 从该网站下载或者从网站开发者出获取证书cacert.crt。
  2. 运行命令将证书导入java运行环境:keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file cacert.crt -alias xxx
  3. 完成。java代码中发送https的请求和http一样,同第一种情况。

B、忽略证书验证过程,忽略之后任何Https协议网站皆能正常访问,同第一种情况

C、java代码中加载证书,必须使用HttpsURLConnection方式

先从网站开发者出获取生成证书的密钥库cacert.keystore

 

转自 https://www.cnblogs.com/mengen/p/9138214.html


发表评论

电子邮件地址不会被公开。 必填项已用*标注