This is an automated email from the ASF dual-hosted git repository.

ycai pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-analytics.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 6ce3360  CASSANDRA-19424 Check for expired certificate during start up 
validation (#43)
6ce3360 is described below

commit 6ce33604bbd9acbee092ab3c4f7f11c0d434f730
Author: Saranya Krishnakumar <[email protected]>
AuthorDate: Wed Mar 6 14:32:22 2024 -0800

    CASSANDRA-19424 Check for expired certificate during start up validation 
(#43)
    
    patch by Saranya Krishnakumar; reviewed by Francisco Guerrero, Yifan Cai 
for CASSANDRA-19424
---
 CHANGES.txt                                           |   1 +
 .../spark/validation/KeyStoreValidation.java          |  18 ++++++++++++++++++
 .../spark/validation/KeyStoreValidationTests.java     |  12 ++++++++++++
 .../test/resources/validation/keystore-expired.p12    | Bin 0 -> 2421 bytes
 4 files changed, 31 insertions(+)

diff --git a/CHANGES.txt b/CHANGES.txt
index 92620a9..6004ee3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 1.0.0
+ * Add certificate expiry check to start up validations done in Cassandra 
Analytics library (CASSANDRA-19424)
  * Use constant reference time during bulk read process (CASSANDRA-19452)
  * Update access of ClearSnapshotStrategy (CASSANDRA-19442)
  * Bulk reader fails to produce a row when regular column values are null 
(CASSANDRA-19411)
diff --git 
a/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/validation/KeyStoreValidation.java
 
b/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/validation/KeyStoreValidation.java
index febb0c8..6926eb8 100644
--- 
a/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/validation/KeyStoreValidation.java
+++ 
b/cassandra-analytics-core/src/main/java/org/apache/cassandra/spark/validation/KeyStoreValidation.java
@@ -25,6 +25,9 @@ import java.security.GeneralSecurityException;
 import java.security.Key;
 import java.security.KeyStore;
 import java.security.PrivateKey;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateExpiredException;
+import java.security.cert.X509Certificate;
 import java.util.Enumeration;
 import java.util.function.Supplier;
 
@@ -62,6 +65,7 @@ public class KeyStoreValidation implements StartupValidation
     @Override
     public void validate()
     {
+        String latestAlias = null;
         try
         {
             if (!configured)
@@ -81,6 +85,16 @@ public class KeyStoreValidation implements StartupValidation
                 throw new RuntimeException("KeyStore is empty");
             }
 
+            for (Enumeration<String> aliases = keyStore.aliases(); 
aliases.hasMoreElements();)
+            {
+                latestAlias = aliases.nextElement();
+                Certificate cert = keyStore.getCertificate(latestAlias);
+                if (cert instanceof X509Certificate)
+                {
+                    ((X509Certificate) cert).checkValidity();
+                }
+            }
+
             for (Enumeration<String> aliases = keyStore.aliases(); 
aliases.hasMoreElements();)
             {
                 Key key = keyStore.getKey(aliases.nextElement(), password);
@@ -91,6 +105,10 @@ public class KeyStoreValidation implements StartupValidation
             }
             throw new RuntimeException("KeyStore contains no private keys");
         }
+        catch (CertificateExpiredException exception)
+        {
+            throw new RuntimeException(String.format("Certificate with alias 
'%s' is expired.", latestAlias), exception);
+        }
         catch (IOException | GeneralSecurityException exception)
         {
             throw new RuntimeException("KeyStore is misconfigured", exception);
diff --git 
a/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/validation/KeyStoreValidationTests.java
 
b/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/validation/KeyStoreValidationTests.java
index 75cf826..f6acb39 100644
--- 
a/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/validation/KeyStoreValidationTests.java
+++ 
b/cassandra-analytics-core/src/test/java/org/apache/cassandra/spark/validation/KeyStoreValidationTests.java
@@ -24,6 +24,7 @@ import org.junit.jupiter.api.Test;
 import org.apache.cassandra.secrets.SecretsProvider;
 import org.apache.cassandra.secrets.TestSecretsProvider;
 
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -97,4 +98,15 @@ public class KeyStoreValidationTests
         Throwable throwable = validation.perform();
         assertNull(throwable);
     }
+
+    @Test
+    public void testExpiredKeyStore()
+    {
+        SecretsProvider secrets = TestSecretsProvider.forKeyStore("PKCS12", 
"keystore-expired.p12", "qwerty");
+        KeyStoreValidation validation = new KeyStoreValidation(secrets);
+
+        Throwable throwable = validation.perform();
+        assertInstanceOf(RuntimeException.class, throwable);
+        assertThat(throwable.getMessage()).startsWith("Certificate with alias 
'1' is expired.");
+    }
 }
diff --git 
a/cassandra-analytics-core/src/test/resources/validation/keystore-expired.p12 
b/cassandra-analytics-core/src/test/resources/validation/keystore-expired.p12
new file mode 100644
index 0000000..891bacd
Binary files /dev/null and 
b/cassandra-analytics-core/src/test/resources/validation/keystore-expired.p12 
differ


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to