keycloak
静的公開メンバ関数 | 静的関数 | 全メンバ一覧
org.keycloak.common.util.CertificateUtils クラス
org.keycloak.common.util.CertificateUtils 連携図
Collaboration graph

静的公開メンバ関数

static X509Certificate generateV3Certificate (KeyPair keyPair, PrivateKey caPrivateKey, X509Certificate caCert, String subject) throws Exception
 
static X509Certificate generateV1SelfSignedCertificate (KeyPair caKeyPair, String subject)
 
static X509Certificate generateV1SelfSignedCertificate (KeyPair caKeyPair, String subject, BigInteger serialNumber)
 
static ContentSigner createSigner (PrivateKey privateKey)
 

静的関数

 [static initializer]
 

詳解

The Class CertificateUtils provides utility functions for generation of V1 and V3 java.security.cert.X509Certificate

著者
Bill Burke
Giriraj Sharma
バージョン
Revision
2

関数詳解

◆ [static initializer]()

org.keycloak.common.util.CertificateUtils.[static initializer] ( )
inlinestaticpackage

◆ createSigner()

static ContentSigner org.keycloak.common.util.CertificateUtils.createSigner ( PrivateKey  privateKey)
inlinestatic

Creates the content signer for generation of Version 1 java.security.cert.X509Certificate.

引数
privateKeythe private key
戻り値
the content signer
172  {
173  try {
174  AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA256WithRSAEncryption");
175  AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
176 
177  return new BcRSAContentSignerBuilder(sigAlgId, digAlgId)
178  .build(PrivateKeyFactory.createKey(privateKey.getEncoded()));
179  } catch (Exception e) {
180  throw new RuntimeException("Could not create content signer.", e);
181  }
182  }

◆ generateV1SelfSignedCertificate() [1/2]

static X509Certificate org.keycloak.common.util.CertificateUtils.generateV1SelfSignedCertificate ( KeyPair  caKeyPair,
String  subject 
)
inlinestatic

Generate version 1 self signed java.security.cert.X509Certificate..

引数
caKeyPairthe CA key pair
subjectthe subject name
戻り値
the x509 certificate
例外
Exceptionthe exception
142  {
143  return generateV1SelfSignedCertificate(caKeyPair, subject, BigInteger.valueOf(System.currentTimeMillis()));
144  }
static X509Certificate generateV1SelfSignedCertificate(KeyPair caKeyPair, String subject)
Definition: CertificateUtils.java:142

◆ generateV1SelfSignedCertificate() [2/2]

static X509Certificate org.keycloak.common.util.CertificateUtils.generateV1SelfSignedCertificate ( KeyPair  caKeyPair,
String  subject,
BigInteger  serialNumber 
)
inlinestatic
146  {
147  try {
148  X500Name subjectDN = new X500Name("CN=" + subject);
149  Date validityStartDate = new Date(System.currentTimeMillis() - 100000);
150  Calendar calendar = Calendar.getInstance();
151  calendar.add(Calendar.YEAR, 10);
152  Date validityEndDate = new Date(calendar.getTime().getTime());
153  SubjectPublicKeyInfo subPubKeyInfo = SubjectPublicKeyInfo.getInstance(caKeyPair.getPublic().getEncoded());
154 
155  X509v1CertificateBuilder builder = new X509v1CertificateBuilder(subjectDN, serialNumber, validityStartDate,
156  validityEndDate, subjectDN, subPubKeyInfo);
157  X509CertificateHolder holder = builder.build(createSigner(caKeyPair.getPrivate()));
158 
159  return new JcaX509CertificateConverter().getCertificate(holder);
160  } catch (Exception e) {
161  throw new RuntimeException("Error creating X509v1Certificate.", e);
162  }
163  }
static ContentSigner createSigner(PrivateKey privateKey)
Definition: CertificateUtils.java:172

◆ generateV3Certificate()

static X509Certificate org.keycloak.common.util.CertificateUtils.generateV3Certificate ( KeyPair  keyPair,
PrivateKey  caPrivateKey,
X509Certificate  caCert,
String  subject 
) throws Exception
inlinestatic

Generates version 3 java.security.cert.X509Certificate.

引数
keyPairthe key pair
caPrivateKeythe CA private key
caCertthe CA certificate
subjectthe subject name
戻り値
the x509 certificate
例外
Exceptionthe exception
77  {
78  try {
79  X500Name subjectDN = new X500Name("CN=" + subject);
80 
81  // Serial Number
82  SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
83  BigInteger serialNumber = BigInteger.valueOf(Math.abs(random.nextInt()));
84 
85  // Validity
86  Date notBefore = new Date(System.currentTimeMillis());
87  Date notAfter = new Date(System.currentTimeMillis() + (((1000L * 60 * 60 * 24 * 30)) * 12) * 3);
88 
89  // SubjectPublicKeyInfo
90  SubjectPublicKeyInfo subjPubKeyInfo = new SubjectPublicKeyInfo(ASN1Sequence.getInstance(keyPair.getPublic()
91  .getEncoded()));
92 
93  X509v3CertificateBuilder certGen = new X509v3CertificateBuilder(new X500Name(caCert.getSubjectDN().getName()),
94  serialNumber, notBefore, notAfter, subjectDN, subjPubKeyInfo);
95 
96  DigestCalculator digCalc = new BcDigestCalculatorProvider()
97  .get(new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1));
98  X509ExtensionUtils x509ExtensionUtils = new X509ExtensionUtils(digCalc);
99 
100  // Subject Key Identifier
101  certGen.addExtension(Extension.subjectKeyIdentifier, false,
102  x509ExtensionUtils.createSubjectKeyIdentifier(subjPubKeyInfo));
103 
104  // Authority Key Identifier
105  certGen.addExtension(Extension.authorityKeyIdentifier, false,
106  x509ExtensionUtils.createAuthorityKeyIdentifier(subjPubKeyInfo));
107 
108  // Key Usage
109  certGen.addExtension(Extension.keyUsage, false, new KeyUsage(KeyUsage.digitalSignature | KeyUsage.keyCertSign
110  | KeyUsage.cRLSign));
111 
112  // Extended Key Usage
113  KeyPurposeId[] EKU = new KeyPurposeId[2];
114  EKU[0] = KeyPurposeId.id_kp_emailProtection;
115  EKU[1] = KeyPurposeId.id_kp_serverAuth;
116 
117  certGen.addExtension(Extension.extendedKeyUsage, false, new ExtendedKeyUsage(EKU));
118 
119  // Basic Constraints
120  certGen.addExtension(Extension.basicConstraints, true, new BasicConstraints(0));
121 
122  // Content Signer
123  ContentSigner sigGen = new JcaContentSignerBuilder("SHA1WithRSAEncryption").setProvider("BC").build(caPrivateKey);
124 
125  // Certificate
126  return new JcaX509CertificateConverter().setProvider("BC").getCertificate(certGen.build(sigGen));
127  } catch (Exception e) {
128  throw new RuntimeException("Error creating X509v3Certificate.", e);
129  }
130  }

このクラス詳解は次のファイルから抽出されました: