如何正确地为通过具有多个 SAN 的本地主机提供服务的测试站点配置自签名证书?
How to correctly a configure a self signed certificate for a test site served over localhost with multiple SANs?
我有一个小型测试网站,我试图通过 https 将其提供给网络视图上的 Android 模拟器。我一直在我的机器上生成自签名证书并将它们导入我的模拟器的证书存储区,但是当我在 webview 上加载页面时,我总是收到无效的通用名称错误。
因为 Android 模拟器存在于虚拟防火墙之后,它们无法访问与开发机器相同的网络接口。我不能只从模拟器加载 localhost 并将其转到 127.0.0.1 环回地址。相反,它在模拟器上被别名为 10.0.2.2。
当我创建自签名证书时,在配置文件中(根据 问题的指示),我将域设置为本地主机并将 10.0.2.2 设置为 SAN,但我仍然无法从我的模拟器正确加载网站的 https 版本。我可能做错了什么?
我的部分 cnf 文件(主要取自 问题的最佳答案):
...
[ 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
我最终解决这个问题的方式有点乱。我在公司的 public DNS 中添加了一个新的子域并将其反向代理到 127.0.0.1 并将证书中的 CN 替换为新域。
例如新域 - abc.xyz-corp.com。当我的模拟器尝试访问该域时,它将转到公司的 dns 并发送到 127.0.0.1 并解析到那里托管的 webapp。
我有一个小型测试网站,我试图通过 https 将其提供给网络视图上的 Android 模拟器。我一直在我的机器上生成自签名证书并将它们导入我的模拟器的证书存储区,但是当我在 webview 上加载页面时,我总是收到无效的通用名称错误。
因为 Android 模拟器存在于虚拟防火墙之后,它们无法访问与开发机器相同的网络接口。我不能只从模拟器加载 localhost 并将其转到 127.0.0.1 环回地址。相反,它在模拟器上被别名为 10.0.2.2。
当我创建自签名证书时,在配置文件中(根据
我的部分 cnf 文件(主要取自
...
[ 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
我最终解决这个问题的方式有点乱。我在公司的 public DNS 中添加了一个新的子域并将其反向代理到 127.0.0.1 并将证书中的 CN 替换为新域。
例如新域 - abc.xyz-corp.com。当我的模拟器尝试访问该域时,它将转到公司的 dns 并发送到 127.0.0.1 并解析到那里托管的 webapp。