我想创建一个将使用 SSL 客户端证书身份验证的 Android 应用程序。
我找到了示例代码,它们向我展示了两个如何在 Android 应用程序中使用 SSL 客户端证书身份验证。这对我来说很清楚。
但是,我的问题是我想在设备上生成 SSL 客户端证书。简单地说,我希望我的程序执行以下操作:
当程序安装在设备上时,应在设备上生成客户端证书(第一次运行时),并将公钥指纹发送到我的服务器。(证书必须在首次使用时生成)。
如何从我的应用程序在 Android 设备上生成客户端证书?
我想创建一个将使用 SSL 客户端证书身份验证的 Android 应用程序。
我找到了示例代码,它们向我展示了两个如何在 Android 应用程序中使用 SSL 客户端证书身份验证。这对我来说很清楚。
但是,我的问题是我想在设备上生成 SSL 客户端证书。简单地说,我希望我的程序执行以下操作:
当程序安装在设备上时,应在设备上生成客户端证书(第一次运行时),并将公钥指纹发送到我的服务器。(证书必须在首次使用时生成)。
如何从我的应用程序在 Android 设备上生成客户端证书?
您可以在 Android 上运行以下代码来生成密钥对并检索指纹。它使用来自 jCraft 的优秀 JSCH 库。
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>