证书类型的Android问题
我需要在Android应用程序中签署PDF文件的证书。似乎我只能使用pfx或p12类型(在iText中)对它们进行签名。 我现在所拥有的:证书类型的Android问题,android,certificate,Android,Certificate,我需要在Android应用程序中签署PDF文件的证书。似乎我只能使用pfx或p12类型(在iText中)对它们进行签名。 我现在所拥有的: Android应用向服务器生成证书签名请求 服务器以以下格式返回证书数据: -----开始证书----- -----结束证书----- 服务器返回X509证书,我无法使用该证书签署PDF。有没有办法将cer(由上述数据构成)转换为p12?如有任何信息,将不胜感激。我已找到。希望能有帮助 String password = "password"
String password = "password";
String text = "545048";
KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream inputStream = activity.getResources().openRawResource(R.raw.am_client);
keyStore.load(inputStream, password.toCharArray());
String alias = keyStore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, password.toCharArray());
X509Certificate certificate = (X509Certificate)keyStore.getCertificate(alias);
//Sign Data
byte[] dataToSign = text.getBytes("UTF-8"); //change to UTF-16 if needed
Signature signature1 = Signature.getInstance("SHA1WithRSA");
signature1.initSign(privateKey);
signature1.update(dataToSign);
byte[] signedData = signature1.sign();
String signed = new String(signedData, "UTF-8"); //change to UTF-16 if needed
Log.d("MESSAGE", "string = " + signed);
一般来说,要对文档进行数字签名,您需要一个私钥和一个证书(可能还有证书链),并且您有:
- 私钥用于对发送到服务器的证书签名请求进行签名(其中包括一些证书数据,如
和公钥)CN
- 服务器返回证书(可能还有链)
public void signPdfFirstTime(String src, String dest)
throws IOException, DocumentException, GeneralSecurityException {
String path = properties.getProperty("PRIVATE");
String keystore_password = properties.getProperty("PASSWORD");
String key_password = properties.getProperty("PASSWORD");
KeyStore ks = KeyStore.getInstance("pkcs12", "BC");
ks.load(new FileInputStream(path), keystore_password.toCharArray());
String alias = (String)ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, key_password.toCharArray());
Certificate[] chain = ks.getCertificateChain(alias);
// reader and stamper
PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
// appearance
PdfSignatureAppearance appearance = stamper .getSignatureAppearance();
appearance.setImage(Image.getInstance(RESOURCE));
appearance.setReason("I've written this.");
appearance.setLocation("Foobar");
appearance.setVisibleSignature(new Rectangle(72, 732, 144, 780), 1, "first");
// digital signature
ExternalSignature es = new PrivateKeySignature(pk, "SHA-256", "BC");
ExternalDigest digest = new BouncyCastleDigest();
MakeSignature.signDetached(appearance, digest, es, chain, null, null, null, 0, CryptoStandard.CMS);
}
您好,写证书是指公共部分,即.cer?是的,证书是公共部分。.cer文件包含一个证书