gpt4 book ai didi

android - 如何在 Android 应用程序中使用 Java 卡中的公钥生成证书签名请求

转载 作者:搜寻专家 更新时间:2023-11-01 09:43:30 26 4
gpt4 key购买 nike

我想为 Java 卡中的 key 对生成证书。我想我应该在 Android 应用程序中生成 pkcs#10 请求并将其发送到 Java 卡,但是要生成 pkcs#10 我需要私钥,但私钥在 Java 卡中,不应该离开它。我该怎么做?

最佳答案

您不需要从 Java Card 中提取私钥来生成证书签名请求。只需要在 CSR 中包含公钥并用私钥签名即可。

在这里Certificate enrollment process您可以看到解释的一般过程和 Android 设备所涉及的代码。

在你的情况下,过程可能是这样的

1) android设备从Java Card获取公钥,构建CSR并将内容发送给Java Card进行签名

2) Java Card 使用私钥对 CSR 进行签名3) android设备将签名后的CSR发送给服务器

4) 服务器用CSR数据构建X509证书,用CA私钥签名,返回X509给客户端

5) Android设备收到证书并发送到Java Card进行存储

关于代码,链接示例添加以下修改将是有效的

创建 CSR

//Necessary to extract the public key from card
PKCS10CertificationRequestBuilder csrBuilder = new JcaPKCS10CertificationRequestBuilder(
new X500Name(principal), keyPair.getPublic());

海绵城堡 JCESigner

private static class JCESigner implements ContentSigner {

@Override
public byte[] getSignature() {
try {
//MUST be executed in the Java Card. In this point you can
//send the outputStream.toByteArray() to the card and sign it with the private key

//signature.update(outputStream.toByteArray());
//return signature.sign();
} catch (GeneralSecurityException gse) {
return null;
}
}

card 中执行的代码 执行签名的代码与此类似

Signature signature = Signature.getInstance(sigAlgo);
signature.initSign(privateKey);
signature.update(dataToSign);
byte signedData = signature.sign();

关于android - 如何在 Android 应用程序中使用 Java 卡中的公钥生成证书签名请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38837578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com