diff --git a/evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/certificate/ServerCertificateManager.java b/evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/certificate/ServerCertificateManager.java index 92301448b..ad0133a3f 100644 --- a/evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/certificate/ServerCertificateManager.java +++ b/evita_external_api/evita_external_api_core/src/main/java/io/evitadb/externalApi/certificate/ServerCertificateManager.java @@ -233,10 +233,10 @@ public void generateSelfSignedCertificate(@Nonnull CertificateType... type) thro // Issue server and client certificates if (Arrays.stream(type).anyMatch(it -> it == CertificateType.SERVER)) { - issueCertificate(CertificateUtils.getServerCertName(), keyPairGenerator, keyPair, x500Name, notBefore, notAfter, rootCert); + issueCertificate(CertificateUtils.getServerCertName(), keyPairGenerator, keyPair, x500Name, notBefore, notAfter, rootCert, CertificateType.SERVER); } if (Arrays.stream(type).anyMatch(it -> it == CertificateType.CLIENT)) { - issueCertificate(CertificateUtils.getClientCertName(), keyPairGenerator, keyPair, x500Name, notBefore, notAfter, rootCert); + issueCertificate(CertificateUtils.getClientCertName(), keyPairGenerator, keyPair, x500Name, notBefore, notAfter, rootCert, CertificateType.CLIENT); } } @@ -258,7 +258,8 @@ private void issueCertificate( @Nonnull X500Name x500Name, @Nonnull Date notBefore, @Nonnull Date notAfter, - @Nonnull X509Certificate rootCert + @Nonnull X509Certificate rootCert, + @Nonnull CertificateType certificateType ) throws Exception { final X500Name issuedCertSubject = new X500Name("CN=" + certificateName); final BigInteger issuedCertSerialNum = new BigInteger(Long.toString(new SecureRandom().nextLong())); @@ -286,6 +287,15 @@ private void issueCertificate( issuedCertBuilder.addExtension(Extension.authorityKeyIdentifier, false, issuedCertExtUtils.createAuthorityKeyIdentifier(rootCert)); issuedCertBuilder.addExtension(Extension.subjectKeyIdentifier, false, issuedCertExtUtils.createSubjectKeyIdentifier(csr.getSubjectPublicKeyInfo())); + if (certificateType == CertificateType.SERVER) { + // Add DNS name to the cert to be used for SSL + issuedCertBuilder.addExtension(Extension.subjectAlternativeName, false, new DERSequence(new ASN1Encodable[]{ + new GeneralName(GeneralName.dNSName, InetAddress.getLocalHost().getHostName()), + new GeneralName(GeneralName.iPAddress, InetAddress.getLocalHost().getHostAddress()), + new GeneralName(GeneralName.dNSName, "localhost") + })); + } + // Add intended key usage extension if needed issuedCertBuilder.addExtension(Extension.keyUsage, false, new KeyUsage(KeyUsage.keyEncipherment | KeyUsage.digitalSignature));