在 Android 设备上生成客户端证书

Posted

技术标签:

【中文标题】在 Android 设备上生成客户端证书【英文标题】:Generating a client certificate on an Android device 【发布时间】:2013-06-30 08:50:45 【问题描述】:

我想创建一个使用 SSL 客户端证书身份验证的 android 应用程序。

我找到了示例代码,它们向我展示了两个如何在 Android 应用程序中使用 SSL 客户端证书身份验证。这对我来说很清楚。

然而,我的问题是我想在设备上生成 SSL 客户端证书。简单地说,我希望我的程序执行以下操作:

当程序安装在设备上时,应在设备上生成客户端证书(首次运行时),并将公钥指纹发送到我的服务器。 (证书必须在首次使用时生成)。

如何从我的应用程序?

【问题讨论】:

【参考方案1】:

您可以在 Android 上运行以下代码来生成密钥对并检索指纹。它使用了优秀的JSCH library from jCraft。

public void generatePublicPrivateKeyPair() throws Exception 

        ByteArrayOutputStream privateKeyOutputStream = new ByteArrayOutputStream();
        ByteArrayOutputStream publicKeyOutputStream = new ByteArrayOutputStream();

        JSch jsch=new JSch();
        KeyPair kpair=KeyPair.genKeyPair(jsch, KeyPair.RSA);
        //kpair.setPassphrase(passphrase);
        kpair.writePrivateKey(privateKeyOutputStream);
        kpair.writePublicKey(publicKeyOutputStream, "Generated by vPro Management Console");

        String fingerPrint = kpair.getFingerPrint();
        System.out.println("Finger print: "+ fingerPrint);
        kpair.dispose();

        byte[] privateKey = privateKeyOutputStream.toByteArray();
        byte[] publicKey = publicKeyOutputStream.toByteArray();

        System.out.println("Private key " + new String(privateKey));
        System.out.println("Public key " + new String(publicKey));


   

只需将 JAR 放在您的 libs 文件夹中即可。

如果你使用maven,你可以像这样引用JSCH依赖:

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.50</version>
</dependency>

【讨论】:

以上是关于在 Android 设备上生成客户端证书的主要内容,如果未能解决你的问题,请参考以下文章

NGINX:客户端证书

无法在工作资料上的 Android 11 上安装 CA 证书

如何使用https 客户端证书

Xcode 6 打包ipa文件

Kubernetes Ingress-Controller 和 AWS API Gateway 客户端证书

Android java更新Android KeyStore中的证书和私钥