最近项目中对接一些接口.有些接口链接还是带https的. 但是并不是所有的https的都可以访问.需要SSL证书. 但是对象一般不会给SSL证书.这时候需要我们自己去拉取证书,添加我们的JVM的白名单.
第一 拉取SSL证书方法
通过火狐浏览器拉取, 注意访问此https证书的时候如图:
然后点击windows的运行,输入CMD.(linux直接执行就行)
第一步: 进入证书所在目录.
cd ....
第二步: 执行下面命令. 由于Java默认的导入库的密码是: changeit
#windows
keytool -import -alias 给证书取个名字[注意不要重复了] -file 你的证书.crt -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit -trustcacerts
#linux
keytool -import -alias 给证书取个名字[注意不要重复了]-file 你的证书.crt -keystore /usr/local/jdk1.8.0_151/jre/lib/security/cacerts -storepass changeit -trustcacerts
第三步: 重启服务.
注意:因为是静态加载,所以要重新启动你的Web Server,证书才能生效。
下面给出怎样调用HTTPS的接口的代码:
InputStream inStream =null;
try {
HttpClient client =new HttpClient();
client.getState().setCredentials(AuthScope.ANY_HOST,"223.87.15.163", //此处随意给一个服务器IP地址
new UsernamePasswordCredentials("cacerts","changeit"));
GetMethod get =new GetMethod(oldFilePath);
get.setDoAuthentication(true );
int status = client.executeMethod( get );
logger.info("调用下载录音获取状态:{}",status);
inStream = get.getResponseBodyAsStream();
}catch (IOException e) {
logger.error("IO流读取异常:",e);
}catch (Exception e) {
logger.error("震鸿获取录音功能异常:",e);
}finally {
try {
if(inStream !=null) {
inStream.close();
}
}catch (IOException e) {
logger.error("关闭流异常",e);
}
}