我已经创建了自己的CA证书,现在我想在我的Android Froyo设备(HTC Desire Z)上安装它,以便设备信任我的证书.
Android将CA证书存储在其Java密钥库中/system/etc/security/cacerts.bks.我将文件复制到我的计算机,使用portecle 1.5添加了我的证书并将其推回到设备.
现在,Android似乎没有自动重新加载文件.我在几篇博客文章中看到我需要重启设备.这样做会导致文件再次被原始文件覆盖.
我的下一个尝试是通过复制它并使用设置菜单中的相应选项从SD卡安装证书.设备告诉我证书已经安装,但显然它不信任证书.此外,当我尝试将密钥库复制到我的计算机时,我仍然可以找到原始库存cacerts.bks.
那么,在Android 2.2设备上安装我自己的根CA证书作为可信证书的正确方法是什么?有没有办法以编程方式进行?
我在这里下载了最新的 MAUI 示例: https: //github.com/microsoft/dotnet-podcasts并复制了他们发出请求的确切方式,但我无法通过“意外的流结束错误”:
System.Net.WebException: unexpected end of stream on com.android.okhttp.Address@4c288121
---> Java.IO.IOException: unexpected end of stream on com.android.okhttp.Address@4c288121
Run Code Online (Sandbox Code Playgroud)
我HttpClient通过工厂方法在 MauiProgram.cs 中初始化AddHttpClient,如下所示(注意 Andorid 的不同 IP 地址):
public static string Base = DeviceInfo.Platform == DevicePlatform.Android ? "http://10.0.2.2" : "https://localhost";
public static string APIUrl = $"{Base}:7096/api/";
builder.Services.AddHttpClient<DishClient>(client => { client.BaseAddress = new Uri(APIUrl); });
Run Code Online (Sandbox Code Playgroud)
android:networkSecurityConfig我已在 AndroidManifest.xml 中包含以下内容(允许 http 流量):
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)
Xamarin 中的解决方案似乎是使用AndroidClientHandler,但这是在一个已弃用的库中,我无法在 MAUI 中使用它,并且在有效的链接解决方案中没有引用它。 …
另一个自签名证书问题,但是我已经尝试了几天,以找到创建自签名证书的最佳/正确方法,该方法将在我的开发环境中适用于最新版本的Chrome,Android和iOS。
对于这些平台中的至少一个,我在这里和其他地方找到的说明已经过时了。
这是我找到的最好的,但仅适用于Chrome和Android。
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/C=US/ST=Oklahoma/L=Stillwater/O=My Company/OU=Engineering" -keyout ca.key -out ca.crt
openssl genrsa -out "test.key" 2048
openssl req -new -key test.key -out test.csr -config openssl.cnf
openssl x509 -req -days 3650 -in test.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extensions v3_req -extfile openssl.cnf -out test.crt
openssl x509 -inform PEM -outform DER -in test.crt -out test.der.crt
Run Code Online (Sandbox Code Playgroud)
openssl.cnf的内容:
[req]
default_bits = 2048
encrypt_key = no # Change to encrypt the private key using des3 or similar …Run Code Online (Sandbox Code Playgroud) android ×3
certificate ×2
.net ×1
.net-maui ×1
installation ×1
ios ×1
maui ×1
openssl ×1
ssl ×1