当前位置: 首页 > 知识库问答 >
问题:

从Android/BouncyCastle中签名的X509证书(CSR响应)中提取证书链信息

白子昂
2023-03-14

我是否能够使用Android或BouncyCastle libs从CA签名的X509客户端证书中提取证书链信息?

我有一个Android客户端,它从受信任的服务器接收CA签名的X509证书。我想将签名的客户端证书和我的私钥保存到PKCS12(. p12)文件中。我目前正在通过创建一个KeyStore对象并添加证书和私钥来执行此操作。当我使用KeyStore.setKeyEntry()方法添加客户端Private ateKey时,证书[]链是最后一个参数,它当前仅包含客户端证书。这是否会阻止我的证书可验证,因为我在证书[]链中没有CA证书?如果是,是否可以使用从签名的X509证书中提取的信息填充证书链?

大多数示例似乎从PEM文件、BKS信任存储加载CA链,或者已经可以访问证书列表。

以下是我所拥有的:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();

提前感谢!

共有1个答案

漆雕恺
2023-03-14

CA证书不包括在您的签名证书中。您必须从某处获取它们(预安装、从可信服务器下载等)。至于不安装完整链,如果验证器已经可以访问必要的CA证书,那么他们总是可以验证您的最终实体证书。您打算如何使用您的密钥和证书?

顺便说一句,您对setDocateEntry()的调用会创建一个受信任的证书条目,这可能不是您想要的最终实体证书。

 类似资料:
  • 我最近升级了Inteliij IDEA 2019.2,如果我尝试从IDE中提取Git,我会发现以下错误:无法访问'https://github.xxx.com/app-Hello-USD/DGS.git/“:SSL证书问题:证书链中的自签名证书。 有人能帮我什么选项,我必须启用。 谢谢

  • 问题内容: 当尝试使用其PHP库通过Twilio发送消息时,我正在为这个错误而苦苦挣扎: 我在Windows 7上使用了wamp。 我当然找到了所有其他有关证书错误的信息。据我所知,通常更新或添加文件即可解决该问题。但是,即使这样做,我仍然遇到相同的错误。 就像这里所做的健全性检查一样,这正是我所做的: 从此处下载了最新的证书:http : //curl.haxx.se/ca/cacert.pem

  • 问题内容: 我遇到客户端https请求的问题。 片段可以如下所示: 我得到的是错误:证书链中的自签名证书。 使用邮递员时,我可以导入客户端证书和密钥,并且可以毫无问题地使用它。有没有可用的解决方案?我还希望对邮递员如何处理证书和工作方式有所了解。 问题答案: 根据您的问题,我想您正在使用SSL通讯的自签名证书进行开发。 如果是这种情况,请在您正在运行节点的任何地方或直接使用 这指示节点允许不信任的

  • 问题内容: 这是我的代码: OpenSSL能够通过命令行解码X509证书,因此我知道它是有效的证书。但是Java似乎并不喜欢它。 无论有没有尾随的\ n,我都已经厌倦了。 有任何想法吗? 问题答案: - 更新 正如评论中提到的那样,OP解决方案唯一的问题是OP 使用的是密钥,而不是证书。 这是 无需Base64转换 的代码 , 因为它本身可以读取PEM文件(它会查找块本身以知道它正在读取PEM文件

  • 由认证机构签署的X509数字证书包含这两个字段。1.签名算法2.签名值我知道“签名算法”字段包含认证机构用来签署证书的哈希算法。“签名值”是哈希计算的签名。我的问题是哈希处理的数据是什么?是作为企业社会责任(证书签名请求)一部分的公钥还是整个企业社会责任的公钥?

  • 问题内容: 是否可以在不使用Bouncy Castle 类的情况下用Java代码合理地创建X509证书? 问题答案: 签名证书的能力不是标准Java库或扩展的一部分。 您自己需要做的许多代码都是核心的一部分。有一些类可以编码和解码X.500名称,X.509证书扩展,各种算法的公钥,当然还有用于实际执行数字签名的类。 自己实施这项工作并非易事,但绝对是可行的-我第一次制作可用于证书签名的原型时,可能