我正在尝试安装自签名证书(使用自制 CA 证书签名)。我设法成功安装了 CA 证书。但是当我尝试安装用户证书时,出现以下错误:“安装证书需要私钥。” 我尝试安装的证书是 pem 证书,是使用 OpenSSL 生成的,在我的 Windows 系统上没有任何问题。
-----BEGIN CERTIFICATE-----
MIIEBzCCAm+gAwIBAgIRANYwbUh/QDsEm5Fc6h1epIEwDQYJKoZIhvcNAQELBQAw
................................................................
60Gv8K2bhDNaEp3cWKFt0f0FBGo2Md79lyJWMDviuGLDI0OmPgkGT4e+LesGAvAp
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud) 我想从同一网络上的 Android 设备访问在本地计算机上运行的 https 站点。Service Worker 和推送通知意味着我需要使用 https。
我已经创建了自己的 CA + 密钥,为localhost和创建了证书192.168.178.23,并在 OSX 上安装了 CA。这一切都按预期工作 - 如果我将本地计算机上的浏览器指向 和 ,则一切都是绿色localhost的192.168.178.23:3000。我遵循了这个指南。
现在我想对我的 Android 设备执行相同的操作,以便我可以通过网络访问本地开发站点。
我戴上myCA.crt设备并点击它,但它显示“安装证书需要私钥”。当我浏览设置到 时,也会发生同样的情况Install a certificate -> CA certificate。
我按照这篇文章将其转换为p12包含密钥和证书的文件。(我不知道为什么 Android 需要这里的密钥)。我的命令是openssl pkcs12 -export -in myCA.crt -inkey myCA.key -out test-combined.p12。
现在,我将p12文件移动到我的设备并点击它。它提示输入密码,并识别出它有一个密钥,但它不会让我将证书作为证书颁发机构 - 只能作为“VPN 和应用程序用户证书”或“Wifi 证书”。当我尝试通过设置安装证书时,它允许我使用密码解锁文件,但随后显示“此文件不能用作 CA 证书”。
myCA.key是
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,A868E9FC78768599
axC3F........................................................... …Run Code Online (Sandbox Code Playgroud) 另一个自签名证书问题,但是我已经尝试了几天,以找到创建自签名证书的最佳/正确方法,该方法将在我的开发环境中适用于最新版本的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)