公司有一些标准的对外https服务,内部调用也需要走https的方式,但是可以用内部IP,这个时候就会遇到证书校验域名不通过的问题,需要忽略。本文分别介绍curl,wget和okhttp中忽略域名校验的方法
curl
- 错误内容
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
- 忽略方式
一种是添加临时域名解析缓存的方式,保证对外域名可以直接解析到内网IP--resolve subdomain.example.com:443:10.0.0.100
;
另外一种是直接关闭域名校验--insecure
# 手工指定域名DNS解析结果,比如把subdomain.example.com:443解析到10.0.0.100:443
curl -v --resolve subdomain.example.com:443:10.0.0.100 https://subdomain.example.com/
# 禁止domain校验
curl -v --insecure https://subdomain.example.com/
wget
增加参数--no-check-certificate
wget 'https://subdomain.example.com/goods.json' --no-check-certificate
OkHttp
- 错误内容
javax.net.ssl.SSLPeerUnverifiedException: Hostname 10.0.0.100 not verified
- 忽略方式:自定义
HostnameVerifier
OkHttpClient client = new OkHttpClient.Builder()
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
//设置自定义的hostname校验类,默认返回true
.hostnameVerifier((hostname, session) -> true)
.build();
网友评论