【发布时间】:2015-01-23 02:04:24
【问题描述】:
我有一个用于网络的自定义 SSL 根 CA,我希望能够将它安装在 Android 设备上。如果我下载它,它会显示“没有要安装的证书”。如何配置证书以使用 openSSL 或其他工具工作?我做了一些谷歌搜索,一些网站说我应该将其转换为 .pfx,但这涉及向用户提供我的私钥并破坏安全性。
【问题讨论】:
标签: android ssl openssl ssl-certificate ca
我有一个用于网络的自定义 SSL 根 CA,我希望能够将它安装在 Android 设备上。如果我下载它,它会显示“没有要安装的证书”。如何配置证书以使用 openSSL 或其他工具工作?我做了一些谷歌搜索,一些网站说我应该将其转换为 .pfx,但这涉及向用户提供我的私钥并破坏安全性。
【问题讨论】:
标签: android ssl openssl ssl-certificate ca
如果您想将您的证书添加到 Android KeyChain(从 ICS 开始就可以),您需要提供X509Certificate(.crt、.pem 等)或PKCS12(.pfx)文件。
您必须从 KeyChain 类调用安装意图。
根据文档:http://developer.android.com/reference/android/security/KeyChain.html#createInstallIntent()
返回可用于凭据安装的 Intent。这 可以在没有任何额外内容的情况下使用意图,在这种情况下,用户将 能够从自己的来源安装凭据。
或者,可以使用 EXTRA_CERTIFICATE 或 EXTRA_PKCS12 来指定 X.509 证书或 PKCS#12 密钥存储的字节 安装。这些附加功能可以与 EXTRA_NAME 结合使用以提供 正在安装的凭据的默认别名。
当与 startActivityForResult(Intent, int) 一起使用时,RESULT_OK 将是 如果凭据安装成功则返回,否则返回 将返回 RESULT_CANCELED。
但是
在我看来,您真正想要做的是在您的应用程序中包含您的X509Certificate,这样您就可以在用户不知情的情况下建立适用于所有设备的安全 SSL 连接。
为此,您必须在应用程序中创建 X509Certificate(作为 PEM 字符串、.crt 文件 .der 文件或 BouncyCastle KeyStore)并用它初始化 SSLContext。完成此操作后,您可以获得SSLSocketFactory,您可以将其与您的 http 客户端一起使用。
更多信息: https://developer.android.com/training/articles/security-ssl.html
【讨论】: