mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Add java keystore helper class, prepare for dynamically generating keystore for SSL use
This commit is contained in:
parent
0efd44ddf7
commit
565dfb9809
63
utils/src/com/cloud/utils/security/CertificateHelper.java
Normal file
63
utils/src/com/cloud/utils/security/CertificateHelper.java
Normal file
@ -0,0 +1,63 @@
|
||||
package com.cloud.utils.security;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.security.Key;
|
||||
import java.security.KeyFactory;
|
||||
import java.security.KeyStore;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.cert.Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.CertificateFactory;
|
||||
import java.security.spec.InvalidKeySpecException;
|
||||
import java.security.spec.PKCS8EncodedKeySpec;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
|
||||
public class CertificateHelper {
|
||||
public static byte[] buildAndSaveKeystore(String alias, String cert, String privateKey, String storePassword) throws KeyStoreException, CertificateException,
|
||||
NoSuchAlgorithmException, InvalidKeySpecException, IOException {
|
||||
KeyStore ks = buildKeystore(alias, cert, privateKey, storePassword);
|
||||
|
||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||
ks.store(os, storePassword != null ? storePassword.toCharArray() : null);
|
||||
os.close();
|
||||
return os.toByteArray();
|
||||
}
|
||||
|
||||
public static KeyStore loadKeystore(byte[] ksData, String storePassword) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {
|
||||
assert(ksData != null);
|
||||
KeyStore ks = KeyStore.getInstance("JKS");
|
||||
ks.load(new ByteArrayInputStream(ksData), storePassword != null ? storePassword.toCharArray() : null);
|
||||
|
||||
return ks;
|
||||
}
|
||||
|
||||
public static KeyStore buildKeystore(String alias, String cert, String privateKey, String storePassword) throws KeyStoreException, CertificateException,
|
||||
NoSuchAlgorithmException, InvalidKeySpecException, IOException {
|
||||
|
||||
KeyStore ks = KeyStore.getInstance("JKS");
|
||||
ks.load(null, storePassword != null ? storePassword.toCharArray() : null);
|
||||
Certificate[] certs = new Certificate[1];
|
||||
certs[0] = buildCertificate(cert);
|
||||
ks.setKeyEntry(alias, buildPrivateKey(privateKey), storePassword != null ? storePassword.toCharArray() : null, certs );
|
||||
return ks;
|
||||
}
|
||||
|
||||
public static Certificate buildCertificate(String content) throws CertificateException {
|
||||
assert(content != null);
|
||||
|
||||
BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(content.getBytes()));
|
||||
CertificateFactory cf = CertificateFactory.getInstance("X.509");
|
||||
return cf.generateCertificate(bis);
|
||||
}
|
||||
|
||||
public static Key buildPrivateKey(String base64EncodedKeyContent) throws NoSuchAlgorithmException, InvalidKeySpecException, IOException {
|
||||
KeyFactory kf = KeyFactory.getInstance("RSA");
|
||||
PKCS8EncodedKeySpec keysp = new PKCS8EncodedKeySpec (Base64.decodeBase64(base64EncodedKeyContent));
|
||||
return kf.generatePrivate (keysp);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user