Android设备安装EAP-TLS认证用户证书的格式检查及问题排查
我正在搭建FreeRADIUS实例,用于通过EAP-TLS对多台Android终端设备进行认证。先在嵌入式Linux设备上测试,配置可正常运行。现在第一步要实现单台Android设备的认证,因此使用FreeRADIUS证书Makefile生成客户端、服务器及CA的证书和密钥,代码片段如下:
###################################################################### # # Create a new client certificate, signed by the the above server # certificate. # ###################################################################### client.csr client.key: client.cnf $(OPENSSL) req -new -out client.csr -keyout client.key -config ./client.cnf chmod g+r client.key client.crt: ca.key ca.pem client.csr $(OPENSSL) ca -batch -keyfile ca.key -cert ca.pem -in client.csr -key $(PASSWORD_CA) -out client.crt -extensions xpclient_ext -extfile xpextensions -config ./client.cnf client.p12: client.crt $(OPENSSL) pkcs12 -legacy -export -in client.crt -inkey client.key -out client.p12 -passin pass:$(PASSWORD_CLIENT) -passout pass:$(PASSWORD_CLIENT) chmod g+r client.p12 cp client.p12 $(USER_NAME).p12 client.pem: client.p12 $(OPENSSL) pkcs12 -legacy -in client.p12 -out client.pem -passin pass:$(PASSWORD_CLIENT) -passout pass:$(PASSWORD_CLIENT) chmod g+r client.pem cp client.pem $(USER_NAME).pem .PHONY: client.vrfy client.vrfy: ca.pem client.pem c_rehash . $(OPENSSL) verify -CApath . client.pem
生成证书使用的OpenSSL版本为:
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
但安装用户证书时遇到多个问题:
安装p12文件时,logcat提示:
W CredentialHelper: java.io.IOException: exception decrypting data - java.security.NoSuchAlgorithmException: 1.2.840.113549.1.5.12 SecretKeyFactory not available
咨询OpenSSL邮件列表后,添加"-legacy"参数重新生成密钥。
安装新的"legacy" p12文件后,使用时logcat出现:
wpa_supplicant: TLS - SSL error: error:0900006e:PEM routines:OPENSSL_internal:NO_START_LINE
尝试安装client.pem文件时,又出现错误:
W CredentialHelper: parseCert(): java.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0c0000be:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
我推测问题源于crt文件格式错误,但如何获取更多细节来检查证书格式?
内容的提问来源于stack exchange,提问作者Clément

