我已经生成了一个自签名证书,我尝试将它安装在运行 Android 10 的手机上,但出现了一个提示Private key required to install certificate
。
我已经在运行 Android 9 且具有相同证书的手机上进行了尝试,它可以按预期工作。
知道是否有任何解决方法可以安装 CA?
我已经生成了一个自签名证书,我尝试将它安装在运行 Android 10 的手机上,但出现了一个提示Private key required to install certificate
。
我已经在运行 Android 9 且具有相同证书的手机上进行了尝试,它可以按预期工作。
知道是否有任何解决方法可以安装 CA?
伟大的!我的问题用这段代码解决了:
openssl pkcs12 -export -in test.crt -inkey test.key -out test-combined.p12
之后,我设法将 test-combined.p12 证书正常导入我的Android 10。
谢谢!
以下是我从这个答案创建一个可与 Android、iOS 和 Chrome 一起使用的自签名证书的方法:
openssl 命令:
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/C=US/ST=Oklahoma/L=Stillwater/O=My Company/OU=Engineering/CN=test.com" -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
openssl.cnf 的内容:
[req]
default_bits = 2048
encrypt_key = no # Change to encrypt the private key using des3 or similar
default_md = sha256
prompt = no
utf8 = yes
# Specify the DN here so we aren't prompted (along with prompt = no above).
distinguished_name = req_distinguished_name
# Extensions for SAN IP and SAN DNS
req_extensions = v3_req
# Be sure to update the subject to match your organization.
[req_distinguished_name]
C = US
ST = Oklahoma
L = Stillwater
O = My Company
OU = Engineering
CN = test.com
# Allow client and server auth. You may want to only allow server auth.
# Link to SAN names.
[v3_req]
basicConstraints = CA:TRUE
subjectKeyIdentifier = hash
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
subjectAltName = @alt_names
# Alternative names are specified as IP.# and DNS.# for IP addresses and
# DNS accordingly.
[alt_names]
DNS.1 = test.com
创建证书后:
基于@ScottyB 的回答:
openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/C=US/ST=Oklahoma/L=Stillwater/O=My Company/OU=Engineering/CN=test.com" -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
该错误提示了如何修复。如果您将上面生成的证书和私钥合并到一个文件中,Android 将接受它:
openssl pkcs12 -export -in test.crt -inkey test.key -out test-combined.p12
将 .p12 文件传输到您的 Android 手机,然后使用从设备存储安装。给它一个好听的可读名称,CA 证书现在可以与使用 ca.key 和 ca.crt 的 Web 服务器等服务一起使用。
这是一个 Nginx 配置片段,用于拒绝所有连接,除了那些提供由上述 ca 证书签名的证书的连接:
# within server block, eg. under the ssl_certificate config
ssl_client_certificate /etc/ssl/ca/ca.crt;
ssl_trusted_certificate /etc/ssl/ca/ca.crt;
ssl_verify_client optional_no_ca;
if ($ssl_client_verify != SUCCESS) { return 403; }
当您的 Android 浏览器现在访问该网站时,只有您出示签名证书,它才会让您进一步进入。