自签名证书安装声称成功,但是android就像证书不存在一样


17

我正在尝试在Android 4.3中为我的Web服务器安装自签名证书。我在SD卡的根目录中有.crt文件(实际上是模拟的,因为我在插槽中没有SD卡)。

要安装证书,请转到设置->常规->安全->凭据存储->从设备存储安装。

我得到一个对话框,其中显示可以修改(但不能)的证书名称(文件名减去.crt扩展名),一个“用于”下拉列表,并选择了“ VPN和应用程序”,并在底部显示文本对话框中显示“软件包包含:一个用户证书”。一切看起来都很好,所以我单击“确定”。对话框消失,并弹出带有“ [name] installed”的吐司消息。

但是,如果我立即转到“受信任的凭据并选择”用户”,则那里什么也没有!新证书也不在“系统”下,但我不希望出现在此位置。如果我在此之后进入浏览器并尝试转到我的网站上,我仍然收到警告,指出该站点的证书不受信任,我也尝试过重新启动,但这没有任何作用。

我究竟做错了什么?完全缺少错误消息没有帮助。我的证书格式错误吗?我尝试使用服务器ssl目录中的.crt文件,并且尝试将其转换为DER格式。

更新:我读到某处Android要求证书必须为p12格式,因此我使用以下命令将Apache2证书转换为p12:

openssl pkcs12 -export -inkey server.key -in server.crt -out ~/server.p12

然后,我重复上述步骤,获得相同的成功消息,然后继续在用户凭据中仍然看不到该证书,并且仍然从移动浏览器中收到不受信任的证书错误。

Answers:


19

在找到要描述适用于我的方法的网站之前,让Android真正安装证书遇到了同样的问题。它可以归纳为以下步骤:

  1. 创建具有v3_req扩展名并作为CA启用的私钥和公共x509证书:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/my_site.key -out /etc/ssl/certs/my_site.crt -reqexts v3_req -extensions v3_ca

  2. 将证书转换为Android可以理解的DER格式:

    sudo openssl x509 -in /etc/ssl/certs/my_site.crt -outform der -out my_site.der.crt

  3. 使用任何方法将其获取my_site.der.crt到您的Android设备-我发现将文件托管在我的Web服务器上并通过Android浏览器进行下载很容易,然后它会自动让您安装它。

尽管我希望将步骤1分为两部分(1a。生成私钥和1b。生成公共证书),但是我并没有花太多时间研究如何做。如果您找到了一种可行的方法,请在评论中让我知道,谢谢。

(我没有添加评论,而是认为这确实是答案的一部分,以供将来参考,因此我将其编辑。--Michael)

我没有创建启用为CA的证书,而是创建了自签名CA,然后使用新CA重新签名了现有的密钥/ csr。然后,我将自签名的CA添加到Android和voila!有效!

生成自签名CA:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

重新签名我从创建密钥以来获得的现有CSR

openssl x509 -req -in existing.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out existing.crt -days 3649

现在,使用第二个命令的修改形式,我将CA证书转换为DER形式:

openssl x509 -in /etc/apache2/ssl/rootCA.pem -outform der -out ~/rootCA.der.crt

这样做的好处是,现在与新的自签名CA重新签名的所有其他不受信任的证书都将在安装了新CA的任何设备上受到信任,而无需安装其他任何东西。这不能完全解决信任不受您控制的站点的问题,但是如果您对内部部门的IT部门(例如)有任何影响,则可能会更容易。


1
我已经有了需要安装的证书,因此我尝试了步骤2,并且声称成功安装后,它仍未显示在“用户信任的凭据”中,并且Chrome重新启动后仍然显示“不受信任的站点”错误。
迈克尔

1
关于v3_req扩展名并启用为CA的证书,Android才能使用该证书吗?如果是这样,是否有一个命令可用于获取现有证书并将其添加到该证书中,因为我无法控制要安装的所有证书。
迈克尔

3
为了回答上一个问题的前半部分,我阅读了您链接的页面,看来问题是Android拒绝安装自签名证书(而不是自签名CA)。这似乎没有记录在案,而Android假装安装的事实使情况更糟。但是问题仍然存在,如果我拥有不受控制的自签名证书,是否可以通过某种方式对它进行“ CA”认证,以便我可以安装它?
迈克尔

1
@我希望您不要介意,我将编辑您的答案以包括我的解决方案,而不是将其包含在注释中,因为它确实属于答案。
2014年

1
我不知道如何生成existing.csr签名请求。我认为这是完整的分步教程的最后一个缺失点。
cguenther
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.