HeliPayCertUtils.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package com.caimei.modules.order.utils;
  2. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  3. import java.io.ByteArrayInputStream;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.nio.file.Files;
  8. import java.nio.file.Paths;
  9. import java.security.*;
  10. import java.security.cert.CertificateException;
  11. import java.security.cert.CertificateFactory;
  12. import java.security.cert.X509Certificate;
  13. import java.util.Enumeration;
  14. /**
  15. * 合利宝证书工具类
  16. */
  17. public abstract class HeliPayCertUtils {
  18. private HeliPayCertUtils() {}
  19. public static PublicKey getPublicKey(String certFilePath) throws CertificateException, IOException, NoSuchProviderException {
  20. return getX509Certificate(certFilePath).getPublicKey();
  21. }
  22. /**
  23. * 获取证书
  24. * @param certFilePath
  25. * @return
  26. * @throws CertificateException
  27. * @throws NoSuchProviderException
  28. * @throws IOException
  29. */
  30. public static X509Certificate getX509Certificate(String certFilePath) throws CertificateException,
  31. NoSuchProviderException, IOException {
  32. CertificateFactory cf = CertificateFactory.getInstance("X.509", BouncyCastleProvider.PROVIDER_NAME);
  33. byte[] readAllBytes = Files.readAllBytes(Paths.get(certFilePath));
  34. String fileContent = new String(readAllBytes);
  35. if("-----BEGIN CERTIFICATE-----".indexOf(fileContent) < 0){
  36. fileContent = "-----BEGIN CERTIFICATE-----\n" + fileContent +
  37. "\n-----END CERTIFICATE-----";
  38. }
  39. InputStream is = new ByteArrayInputStream(fileContent.getBytes());
  40. return (X509Certificate) cf.generateCertificate(is);
  41. }
  42. public static PrivateKey getPrivateKeyByPfx(String pfxPath, String pfxPassword) {
  43. try {
  44. KeyStore ks = KeyStore.getInstance("PKCS12",getProvider());
  45. FileInputStream fis = new FileInputStream(pfxPath);
  46. // If the keystore password is empty(""), then we have to set
  47. // to null, otherwise it won't work!!!
  48. char[] nPassword = null;
  49. if ((pfxPassword == null) || pfxPassword.trim().equals("")) {
  50. nPassword = null;
  51. } else {
  52. nPassword = pfxPassword.toCharArray();
  53. }
  54. ks.load(fis, nPassword);
  55. fis.close();
  56. Enumeration enumas = ks.aliases();
  57. String keyAlias = null;
  58. if (enumas.hasMoreElements())// we are readin just one certificate.
  59. {
  60. keyAlias = (String) enumas.nextElement();
  61. }
  62. PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);
  63. return prikey;
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. return null;
  68. }
  69. private static Provider getProvider() {
  70. return Security.getProvider(BouncyCastleProvider.PROVIDER_NAME);
  71. }
  72. }