[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-9632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15710043#comment-15710043
 ] 

ASF GitHub Bot commented on CLOUDSTACK-9632:
--------------------------------------------

Github user jburwell commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1799#discussion_r90310775
  
    --- Diff: 
utils/src/main/java/com/cloud/utils/security/CertificateHelper.java ---
    @@ -40,123 +46,122 @@
     import java.util.ArrayList;
     import java.util.List;
     
    -import com.cloud.utils.exception.CloudRuntimeException;
    -import org.apache.commons.codec.binary.Base64;
    -
    -import com.cloud.utils.Ternary;
    -import org.bouncycastle.openssl.PEMReader;
    -
     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 byte[] buildAndSaveKeystore(final String alias, final 
String cert, final String privateKey, final String storePassword) throws 
KeyStoreException, CertificateException,
    +    NoSuchAlgorithmException, InvalidKeySpecException, IOException {
    +        final KeyStore ks = buildKeystore(alias, cert, privateKey, 
storePassword);
    +
    +        try (final ByteArrayOutputStream os = new ByteArrayOutputStream()) 
{
    +            ks.store(os, storePassword != null ? 
storePassword.toCharArray() : null);
    +            return os.toByteArray();
    +        }
         }
     
    -    public static byte[] buildAndSaveKeystore(List<Ternary<String, String, 
String>> certs, String storePassword) throws KeyStoreException, 
NoSuchAlgorithmException,
    -        CertificateException, IOException, InvalidKeySpecException {
    -        KeyStore ks = KeyStore.getInstance("JKS");
    +    public static byte[] buildAndSaveKeystore(final List<Ternary<String, 
String, String>> certs, final String storePassword) throws KeyStoreException, 
NoSuchAlgorithmException,
    +    CertificateException, IOException, InvalidKeySpecException {
    +        final KeyStore ks = KeyStore.getInstance("JKS");
             ks.load(null, storePassword != null ? storePassword.toCharArray() 
: null);
     
             //name,cert,key
    -        for (Ternary<String, String, String> cert : certs) {
    +        for (final Ternary<String, String, String> cert : certs) {
                 if (cert.third() == null) {
    -                Certificate c = buildCertificate(cert.second());
    +                final Certificate c = buildCertificate(cert.second());
                     ks.setCertificateEntry(cert.first(), c);
                 } else {
    -                Certificate[] c = new Certificate[certs.size()];
    +                final Certificate[] c = new Certificate[certs.size()];
                     int i = certs.size();
    -                for (Ternary<String, String, String> ct : certs) {
    +                for (final Ternary<String, String, String> ct : certs) {
                         c[i - 1] = buildCertificate(ct.second());
                         i--;
                     }
                     ks.setKeyEntry(cert.first(), 
buildPrivateKey(cert.third()), storePassword != null ? 
storePassword.toCharArray() : null, c);
                 }
             }
     
    -        ByteArrayOutputStream os = new ByteArrayOutputStream();
    -        ks.store(os, storePassword != null ? storePassword.toCharArray() : 
null);
    -        os.close();
    -        return os.toByteArray();
    +        try (final ByteArrayOutputStream os = new ByteArrayOutputStream()) 
{
    +            ks.store(os, storePassword != null ? 
storePassword.toCharArray() : null);
    +            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);
    +    public static KeyStore loadKeystore(final byte[] ksData, final String 
storePassword) throws KeyStoreException, CertificateException, 
NoSuchAlgorithmException, IOException {
    +        assert ksData != null;
    +        final KeyStore ks = KeyStore.getInstance("JKS");
    +        try (final ByteArrayInputStream is = new 
ByteArrayInputStream(ksData)) {
    +            ks.load(is, 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 {
    +    public static KeyStore buildKeystore(final String alias, final String 
cert, final String privateKey, final String storePassword) throws 
KeyStoreException, CertificateException,
    +    NoSuchAlgorithmException, InvalidKeySpecException, IOException {
     
    -        KeyStore ks = KeyStore.getInstance("JKS");
    +        final KeyStore ks = KeyStore.getInstance("JKS");
             ks.load(null, storePassword != null ? storePassword.toCharArray() 
: null);
    -        Certificate[] certs = new Certificate[1];
    +        final 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);
    +    public static Certificate buildCertificate(final String content) 
throws CertificateException {
    +        assert content != null;
     
    -        BufferedInputStream bis = new BufferedInputStream(new 
ByteArrayInputStream(content.getBytes()));
    -        CertificateFactory cf = CertificateFactory.getInstance("X.509");
    +        final BufferedInputStream bis = new BufferedInputStream(new 
ByteArrayInputStream(content.getBytes()));
    +        final 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));
    +    public static Key buildPrivateKey(final String 
base64EncodedKeyContent) throws NoSuchAlgorithmException, 
InvalidKeySpecException, IOException {
    --- End diff --
    
    Please consider adding a `Preconditions.checkArgument` to check that 
`base64EncodedKeyContent` is not blank.


> Upgrade bountycastle to 1.55+
> -----------------------------
>
>                 Key: CLOUDSTACK-9632
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9632
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>            Reporter: Rohit Yadav
>            Assignee: Rohit Yadav
>             Fix For: Future, 4.10.0.0
>
>
> Upgrade bountycastle library to latest versions.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to