diff --git a/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java b/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java index 03938431..b73dd138 100644 --- a/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java +++ b/spring-vault-core/src/main/java/org/springframework/vault/support/CertificateBundle.java @@ -27,6 +27,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonProperty; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.Base64Utils; import org.springframework.vault.VaultException; @@ -38,6 +39,7 @@ import org.springframework.vault.VaultException; * {@link X509Certificate}. * * @author Mark Paluch + * @author Alex Bremora * @see #getPrivateKeySpec() * @see #getX509Certificate() * @see #getIssuingCaCertificate() @@ -46,26 +48,11 @@ public class CertificateBundle extends Certificate { private final String privateKey; + @Nullable private final String privateKeyType; private final List caChain; - /** - * Create a new {@link CertificateBundle}. - * @param serialNumber the serial number. - * @param certificate the certificate. - * @param issuingCaCertificate the issuing CA certificate. - * @param caChain the CA chain. - * @param privateKey the private key. - * @deprecated since 2.3.3, use {@link #CertificateBundle(String, String, String, List, String, String)} instead. - */ - @Deprecated - CertificateBundle(String serialNumber, String certificate, String issuingCaCertificate, - List caChain, String privateKey) { - - this(serialNumber, certificate, issuingCaCertificate, caChain, privateKey, null); - } - /** * Create a new {@link CertificateBundle}. * @param serialNumber the serial number. @@ -78,7 +65,7 @@ public class CertificateBundle extends Certificate { CertificateBundle(@JsonProperty("serial_number") String serialNumber, @JsonProperty("certificate") String certificate, @JsonProperty("issuing_ca") String issuingCaCertificate, @JsonProperty("ca_chain") List caChain, @JsonProperty("private_key") String privateKey, - @JsonProperty("private_key_type") String privateKeyType) { + @Nullable @JsonProperty("private_key_type") String privateKeyType) { super(serialNumber, certificate, issuingCaCertificate); this.privateKey = privateKey; @@ -93,11 +80,8 @@ public class CertificateBundle extends Certificate { * @param certificate must not be empty or {@literal null}. * @param issuingCaCertificate must not be empty or {@literal null}. * @param privateKey must not be empty or {@literal null}. - * @return the {@link CertificateBundle} - * @deprecated since 2.3.3, use {@link #of(String, String, String, String, String)} - * instead. + * @return the {@link CertificateBundle} instead. */ - @Deprecated public static CertificateBundle of(String serialNumber, String certificate, String issuingCaCertificate, String privateKey) { @@ -107,7 +91,7 @@ public class CertificateBundle extends Certificate { Assert.hasText(privateKey, "Private key must not be empty"); return new CertificateBundle(serialNumber, certificate, issuingCaCertificate, - Collections.singletonList(issuingCaCertificate), privateKey); + Collections.singletonList(issuingCaCertificate), privateKey, null); } /** @@ -119,9 +103,10 @@ public class CertificateBundle extends Certificate { * @param privateKey must not be empty or {@literal null}. * @param privateKeyType must not be empty or {@literal null}. * @return the {@link CertificateBundle} + * @since 2.4 */ public static CertificateBundle of(String serialNumber, String certificate, String issuingCaCertificate, - String privateKey, String privateKeyType) { + String privateKey, @Nullable String privateKeyType) { Assert.hasText(serialNumber, "Serial number must not be empty"); Assert.hasText(certificate, "Certificate must not be empty"); @@ -141,8 +126,10 @@ public class CertificateBundle extends Certificate { } /** - * @return the private key type. + * @return the private key type, can be {@literal null}. + * @since 2.4 */ + @Nullable public String getPrivateKeyType() { return this.privateKeyType; } diff --git a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java index 0302e994..77ef2323 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/core/VaultPkiTemplateIntegrationTests.java @@ -49,21 +49,23 @@ import org.springframework.vault.support.VaultCertificateResponse; import org.springframework.vault.support.VaultSignCertificateRequestResponse; import org.springframework.vault.util.IntegrationTestSupport; import org.springframework.vault.util.RequiresVaultVersion; +import org.springframework.vault.util.Version; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.springframework.vault.util.Settings.findWorkDir; +import static org.assertj.core.api.Assertions.*; +import static org.springframework.vault.util.Settings.*; /** * Integration tests for {@link VaultPkiTemplate} through {@link VaultPkiOperations}. * * @author Mark Paluch + * @author Alex Bremora */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = VaultIntegrationTestConfiguration.class) class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport { - static final String NO_TTL_UNIT_REQUIRED_FROM = "0.7.3"; + private static final String NO_TTL_UNIT_REQUIRED_FROM = "0.7.3"; + private static final Version PRIVATE_KEY_TYPE_FROM = Version.parse("0.7.0"); @Autowired VaultOperations vaultOperations; @@ -108,11 +110,16 @@ class VaultPkiTemplateIntegrationTests extends IntegrationTestSupport { CertificateBundle data = certificateResponse.getRequiredData(); assertThat(data.getPrivateKey()).isNotEmpty(); - assertThat(data.getPrivateKeyType()).isEqualTo("rsa"); + + if (prepare().getVersion().isGreaterThanOrEqualTo(PRIVATE_KEY_TYPE_FROM)) { + assertThat(data.getPrivateKeyType()).isEqualTo("rsa"); + } + assertThat(data.getCertificate()).isNotEmpty(); assertThat(data.getIssuingCaCertificate()).isNotEmpty(); assertThat(data.getSerialNumber()).isNotEmpty(); - assertThat(data.getX509Certificate().getSubjectX500Principal().getName()).isEqualTo("CN=hello.example.com"); + assertThat(data.getX509Certificate().getSubjectX500Principal() + .getName()).isEqualTo("CN=hello.example.com"); assertThat(data.getX509IssuerCertificates()).hasSize(2); KeyStore keyStore = data.createKeyStore("vault"); diff --git a/spring-vault-core/src/test/java/org/springframework/vault/support/CertificateBundleUnitTests.java b/spring-vault-core/src/test/java/org/springframework/vault/support/CertificateBundleUnitTests.java index d1977113..cf68f8de 100644 --- a/spring-vault-core/src/test/java/org/springframework/vault/support/CertificateBundleUnitTests.java +++ b/spring-vault-core/src/test/java/org/springframework/vault/support/CertificateBundleUnitTests.java @@ -24,12 +24,13 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; /** * Unit tests for {@link CertificateBundle}. * * @author Mark Paluch + * @author Alex Bremora */ class CertificateBundleUnitTests {