问题描述
我有一个小型测试网站,我试图通过https将其提供给webview上的Android模拟器。我一直在计算机上生成自签名证书,并将其导入到模拟器的证书存储中,但是当我在Webview中加载页面时,我总是收到无效的通用名称错误。
由于Android仿真器位于虚拟防火墙之后,因此它们无法访问与开发计算机相同的网络接口。我不能只是从仿真器加载本地主机并将其转到127.0.0.1回送地址。而是在模拟器上将其别名为10.0.2.2。
在创建自签名证书时,在配置文件中(根据this问题的说明),我将域设置为localhost并将10.0.2.2设置为SAN,但仍然无法正确进行操作从我的模拟器加载网站的https版本。我可能做错了什么?
...
[ subject ]
...
commonName = localhost
emailAddress = me@home.com
...
[ req_ext ]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
keyUsage = digitalSignature,keyEncipherment
subjectAltName = @alternate_names
nsComment = "OpenSSL Generated Certificate"
[ alternate_names ]
DNS.1 = 127.0.0.1
DNS.2 = 10.0.2.2
解决方法
我最终解决此问题的方式有点破烂。我在公司的公共DNS中添加了一个新的子域,然后将其反向代理到127.0.0.1,并用新域替换了证书中的CN。
例如,新域-abc.xyz-corp.com。当我的仿真器尝试访问该域时,它将进入公司的dns并发送到127.0.0.1,然后解析到托管在此的Webapp。