Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit e5c50c8

Browse files
author
Simon Stone
authored
[FABJ-534] Use Bouncy Castle to generate private keys (#79)
Use Bouncy Castle to generate private keys when we are generating a self signed certificate to use for service discovery when mutual TLS is disabled. This works more reliably then just using the default security provider. Also, use Bouncy Castle classes to serialize the private key into the PEM format instead of the hand written code. Signed-off-by: Simon Stone <sstone1@uk.ibm.com>
1 parent 14116b2 commit e5c50c8

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

src/main/java/org/hyperledger/fabric/sdk/security/certgen/TLSCertificateBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private X509v3CertificateBuilder createCertBuilder(KeyPair keyPair) {
156156
}
157157

158158
private KeyPair createKeyPair() throws NoSuchAlgorithmException {
159-
KeyPairGenerator keypairGen = KeyPairGenerator.getInstance(keyType);
159+
KeyPairGenerator keypairGen = KeyPairGenerator.getInstance(keyType, new BouncyCastleProvider());
160160
keypairGen.initialize(256, rand);
161161
return keypairGen.generateKeyPair();
162162
}

src/main/java/org/hyperledger/fabric/sdk/security/certgen/TLSCertificateKeyPair.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
import java.io.ByteArrayOutputStream;
2020
import java.io.IOException;
2121
import java.io.InputStreamReader;
22-
import java.io.PrintWriter;
22+
import java.io.OutputStreamWriter;
2323
import java.security.KeyPair;
2424
import java.security.cert.X509Certificate;
2525

26-
import org.apache.commons.codec.binary.Base64;
2726
import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
27+
import org.bouncycastle.openssl.jcajce.JcaPKCS8Generator;
2828
import org.bouncycastle.util.io.pem.PemObject;
2929
import org.bouncycastle.util.io.pem.PemReader;
3030

@@ -52,7 +52,7 @@ private TLSCertificateKeyPair(byte[] certPemBytes, byte[] certDerBytes, byte[] k
5252
*/
5353
static TLSCertificateKeyPair fromX509CertKeyPair(X509Certificate x509Cert, KeyPair keyPair) throws IOException {
5454
ByteArrayOutputStream baos = new ByteArrayOutputStream();
55-
PrintWriter writer = new PrintWriter(baos);
55+
OutputStreamWriter writer = new OutputStreamWriter(baos);
5656
JcaPEMWriter w = new JcaPEMWriter(writer);
5757
w.writeObject(x509Cert);
5858
w.flush();
@@ -65,12 +65,12 @@ static TLSCertificateKeyPair fromX509CertKeyPair(X509Certificate x509Cert, KeyPa
6565
byte[] derBytes = pem.getContent();
6666

6767
baos = new ByteArrayOutputStream();
68-
PrintWriter wr = new PrintWriter(baos);
69-
wr.println("-----BEGIN PRIVATE KEY-----");
70-
wr.println(new String(Base64.encodeBase64(keyPair.getPrivate().getEncoded())));
71-
wr.println("-----END PRIVATE KEY-----");
72-
wr.flush();
73-
wr.close();
68+
writer = new OutputStreamWriter(baos);
69+
w = new JcaPEMWriter(writer);
70+
JcaPKCS8Generator keygen = new JcaPKCS8Generator(keyPair.getPrivate(), null);
71+
w.writeObject(keygen.generate());
72+
w.flush();
73+
w.close();
7474
byte[] keyBytes = baos.toByteArray();
7575
return new TLSCertificateKeyPair(pemBytes, derBytes, keyBytes);
7676
}

0 commit comments

Comments
 (0)