mirror of
https://github.com/OpenBankProject/API-Explorer.git
synced 2026-02-06 10:47:23 +00:00
feature/Add SelfSignedCertificateUtil
This commit is contained in:
parent
3c0f915548
commit
db97314da9
52
src/main/scala/code/util/SelfSignedCertificateUtil.scala
Normal file
52
src/main/scala/code/util/SelfSignedCertificateUtil.scala
Normal file
@ -0,0 +1,52 @@
|
||||
package code.util
|
||||
|
||||
import java.io.PrintWriter
|
||||
import java.math.BigInteger
|
||||
import java.security._
|
||||
import java.security.cert.{Certificate, CertificateException}
|
||||
import java.time.Instant
|
||||
import java.time.temporal.ChronoUnit
|
||||
import java.util.Date
|
||||
|
||||
import org.bouncycastle.asn1.x500.X500Name
|
||||
import org.bouncycastle.cert.jcajce.{JcaX509CertificateConverter, JcaX509v3CertificateBuilder}
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
||||
import org.bouncycastle.openssl.jcajce.JcaPEMWriter
|
||||
import org.bouncycastle.operator.OperatorCreationException
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
|
||||
|
||||
|
||||
object SelfSignedCertificateUtil {
|
||||
|
||||
def main(args: Array[String]): Unit = {
|
||||
Security.addProvider(new BouncyCastleProvider)
|
||||
val pair = generateSelfSignedCert("app.example.com")
|
||||
val pemWriter = new JcaPEMWriter(new PrintWriter(System.out))
|
||||
pemWriter.writeObject(pair._1) // Create PEM representation of private key
|
||||
pemWriter.writeObject(pair._2) // Create PEM representation of certificate
|
||||
pemWriter.flush() // Print result to the standard out
|
||||
pemWriter.close()
|
||||
}
|
||||
|
||||
private val bcProvider = BouncyCastleProvider.PROVIDER_NAME
|
||||
|
||||
@throws[NoSuchProviderException]
|
||||
@throws[NoSuchAlgorithmException]
|
||||
@throws[OperatorCreationException]
|
||||
@throws[CertificateException]
|
||||
def generateSelfSignedCert(commonName: String): (PrivateKey, Certificate) = {
|
||||
Security.addProvider(new BouncyCastleProvider)
|
||||
val keyPairGenerator = KeyPairGenerator.getInstance("RSA", bcProvider) // Define RSA as the algorithm for a key creation
|
||||
keyPairGenerator.initialize(2048) // Define 2048 as the size of the key
|
||||
val keyPair = keyPairGenerator.generateKeyPair
|
||||
val dnName = new X500Name("CN=" + commonName)
|
||||
val certSerialNumber = BigInteger.valueOf(System.currentTimeMillis)
|
||||
val signatureAlgorithm = "SHA256WithRSA"
|
||||
val contentSigner = new JcaContentSignerBuilder(signatureAlgorithm).build(keyPair.getPrivate)
|
||||
val startDate = Instant.now
|
||||
val endDate = startDate.plus(2 * 365, ChronoUnit.DAYS)
|
||||
val certBuilder = new JcaX509v3CertificateBuilder(dnName, certSerialNumber, Date.from(startDate), Date.from(endDate), dnName, keyPair.getPublic)
|
||||
val certificate = new JcaX509CertificateConverter().setProvider(bcProvider).getCertificate(certBuilder.build(contentSigner))
|
||||
(keyPair.getPrivate, certificate)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user