百度地图在局域网内使用HTTPS协议证书认证失败解决方法
问题原因
根据甲方客户要求,需要将项目之前的HTTP协议改为安全的HTTPS协议,且将之前应用的离线百度地图,改为在线百度地图。
HTTPS证书认证需要公网IP,因此在公安局域网下进行HTTPS请求,则会出现百度地图证书认证不通过的问题;如果在局域网环境下建立HTTPS需要自己生成CA认证的认证书导入浏览器
解决方法
1.在浏览器中设置,不阻止证书认证不通过的资源加载,但是该方法在局域网内仍然不起作用
2.生成CA认证导入,该方法对于已经上线的项目,修改成本较大
3.在代码中,将百度地图的请求直接改为HTTP请求,不走认证认证的流程,
正确的调用js–api方法是:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的密钥"></script>
这样,百度地图之后加载的资源都会遵循HTTP协议,则不会出现证书认证的问题。但是,在实际环境中,使用HTTP协议后连百度资源都木有加载上,悲伤ing。
最终解决方法
在看多种资源之后,发现百度地图是瓦片加载,不同的资源放在不同的服务器上。在实际的部署环境中,外网代理并没有添加全关于百度地图资源的所有域名。于是,根据能够加载百度地图的环境中,打开F12看百度地图都引用了哪些域名资源。我们的实际环境中使用HTTPS协议缺少以下资源,供大家参考:
api.map.baidu.com
loc.map.baidu.com
gss0.bdstatic.com
ss0.bdstatic.com
HTTP协议加载的百度地图,缺少以下资源:
loc.map.baidu.com
newvector.map.baidu.com
bbs.lbsyun.baidu.com
client.map.baidu.com
api.map.baidu.com
aps.amap.com
lbsyun.baidu.com
ofloc.map.baidu.com/180.97.104.187:443
daup.map.baidu.com {355, 917859, 10271} 106.39.162.216
r6.mo.baidu.com
loc.map.baidu.com
online0.map.bdimg.com
api0.map.bdimg.com
小结
前端开发要加强对于网络协议的理解,可参考一下文章
https://www.cnblogs.com/rock-roll/p/8981511.html
https://www.jianshu.com/p/6db0c6dc97a9