我正在尝试在本地测试我的 Android 应用程序。
该应用程序必须从 192.168.1.16 获取数据。
本地服务器证书是一个自签名证书,所以我做了我在 stackoverflow 和其他网站上找到的东西(特别感谢 https://stackoverflow.com/a/71542188/3872061):
。将证书存储在 res/raw/larragon_certif 中
。创建了一个 res/xml/network_security_config.xml 指向 @raw/larragon_certif
。在manifest.xml中的节点应用程序上添加了属性 android:networkSecurityConfig="@xml/network_security_config"
现在所有以前的错误和异常都更改为以下内容:
javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.1.16 not verified:
certificate: sha1/Gr8h0ea/mhIMIADb7CMK47K8Moo=
DN: CN=laragon,OU=IT,O=Laragon,L=Singapore,ST=Singapore,C=SG
subjectAltNames: [localhost, ..., ..., ..., 192.168.1.16]
因此,应用程序似乎正确找到了自签名证书,并且不再拒绝它,但它不认为 192.168.1.16 被该证书覆盖。
经过几个小时的搜索,我终于在问了几分钟后让它开始工作......
仍然发布答案而不是删除我的问题,因为我可能不是唯一遇到此问题的人。
这里的所有步骤都是一个好的开始,这是我问题的一半以上答案:https://stackoverflow.com/a/71542188/3872061
我需要将我的本地IP添加到证书覆盖的服务器:
只需在
IP.1=192.168.1.16
的
subjectAltName
部分添加一个新的
openssl.conf
条目
然后作为
key usage
相关异常的答案,我将stackoverflow证书的关键用法与我的自签名证书的关键用法进行了比较,发现我的证书既没有digitalSignature
也没有clientAuth
。我添加了两者,现在尝试从应用程序内访问本地服务器时不再出现异常。
旁注:本地服务器是 Laragon 驱动的。对于使用它的人来说,一些精度:
Laragon 将自己的自签名证书放入 etc/ssl 中。为了更改证书设置,我必须:
。当然修改etc/ssl/openssl.conf
。将此文件设置为只读,以防止 Laragon 在创建证书时覆盖它
。然后从 Laragon 面板中禁用并重新启用 https。这将触发新的自签名证书创建。