证书工具

This commit is contained in:
cheney
2022-10-13 10:21:45 +08:00
parent ee395aebee
commit f36b8c2ca3
8 changed files with 240 additions and 3 deletions
+66 -3
View File
@@ -1,19 +1,82 @@
package com.sunyard.util;
import cn.hutool.core.codec.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import sun.misc.BASE64Encoder;
import java.io.ByteArrayInputStream;
import java.security.NoSuchProviderException;
import java.security.Security;
import java.security.cert.CertificateEncodingException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Map;
public class CertUtil {
public static String encodeBase64(byte[] data){
return new BASE64Encoder().encode( data );
}
static {
Security.addProvider(new BouncyCastleProvider());
}
public static X509Certificate convertToX509Cert(String certificateString) throws CertificateException, NoSuchProviderException {
// X509Certificate certificate = null;
// CertificateFactory cf = null;
// try {
// if (certificateString != null && !certificateString.trim().isEmpty()) {
// certificateString = certificateString.replace("-----BEGIN CERTIFICATE-----\n", "")
// .replace("-----END CERTIFICATE-----", ""); // NEED FOR PEM FORMAT CERT STRING
// byte[] certificateData = Base64.decode(certificateString);
// cf = CertificateFactory.getInstance("X509");
// certificate = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certificateData));
// }
// } catch (CertificateException e) {
// throw new CertificateException(e);
// }
// return certificate;
CertificateFactory CF = CertificateFactory.getInstance("X.509", "BC"); // 从证书工厂中获取X.509的单例类
return (X509Certificate) CF.generateCertificate(new ByteArrayInputStream(certificateString.getBytes())); // 将文件流的证书转化为证书类
}
public static String convertToPem(X509Certificate cert) throws CertificateEncodingException {
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
String end_cert = "\n-----END CERTIFICATE-----";
byte[] derCert = cert.getEncoded();
String pemCertPre = new String(Base64.encode(derCert, true));
String pemCert = cert_begin + pemCertPre + end_cert;
return pemCert;
// StringWriter sw = new StringWriter();
// PemWriter pw = new PemWriter(sw);
// try {
// pw.writeObject(new JcaMiscPEMGenerator(cert));
// }catch ( Exception e ) {
// e.printStackTrace();
// }finally {
// if (null == pw) {
// try {
// pw.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }
// return sw.toString();
}
/**
* 判断正式是否是国密证书
* @param cert 证书 base64 字符
* @return true 国密, false 非国密
*/
public static boolean isSM2Cert(String cert){
public static boolean isSM2Cert(String cert) throws CertificateException, NoSuchProviderException {
X509Certificate certificate = convertToX509Cert(cert);
String signAlg = certificate.getSigAlgName();
return signAlg.toUpperCase().indexOf("SM2") >= 0;
}
/**
@@ -22,7 +85,7 @@ public class CertUtil {
* @return true 国密, false 非国密
*/
public static boolean isSignedBySM2Cert( String pkcs7 ){
return false;
}