99
1010import org .elasticsearch .common .settings .MockSecureSettings ;
1111import org .elasticsearch .common .settings .Settings ;
12+ import org .elasticsearch .common .ssl .DiagnosticTrustManager ;
1213import org .elasticsearch .common .ssl .PemKeyConfig ;
1314import org .elasticsearch .test .SecurityIntegTestCase ;
1415
15- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_CERT_PATH ;
16- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_KEYSTORE_ALIAS ;
17- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_KEYSTORE_PATH ;
18- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_KEYSTORE_SECURE_PASSWORD ;
19- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_KEYSTORE_TYPE ;
20- import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySignerSettings .SIGNING_KEY_PATH ;
16+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .DIAGNOSE_TRUST_EXCEPTIONS ;
17+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_CERTIFICATE_AUTHORITIES ;
18+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_CERT_PATH ;
19+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_KEYSTORE_ALIAS ;
20+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_KEYSTORE_PATH ;
21+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_KEYSTORE_SECURE_PASSWORD ;
22+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_KEYSTORE_TYPE ;
23+ import static org .elasticsearch .xpack .security .transport .CrossClusterApiKeySigningSettings .SIGNING_KEY_PATH ;
2124import static org .hamcrest .Matchers .equalToIgnoringCase ;
2225
23- public class CrossClusterApiKeySignerIntegTests extends SecurityIntegTestCase {
26+ public class CrossClusterApiKeySignatureManagerIntegTests extends SecurityIntegTestCase {
2427
2528 private static final String DYNAMIC_TEST_CLUSTER_ALIAS = "dynamic_test_cluster" ;
2629 private static final String STATIC_TEST_CLUSTER_ALIAS = "static_test_cluster" ;
2730
2831 public void testSignWithPemKeyConfig () {
29- final CrossClusterApiKeySigner signer = getCrossClusterApiKeySignerInstance ();
32+ final CrossClusterApiKeySignatureManager manager = getCrossClusterApiKeySignatureManagerInstance ();
3033 final String [] testHeaders = randomArray (5 , String []::new , () -> randomAlphanumericOfLength (randomInt (20 )));
3134
32- X509CertificateSignature signature = signer .sign (STATIC_TEST_CLUSTER_ALIAS , testHeaders );
33- signature .certificate ().getPublicKey ();
34-
35+ X509CertificateSignature signature = manager .signerForClusterAlias (STATIC_TEST_CLUSTER_ALIAS ).sign (testHeaders );
3536 var keyConfig = new PemKeyConfig (
3637 "signing_rsa.crt" ,
3738 "signing_rsa.key" ,
3839 new char [0 ],
3940 getDataPath ("/org/elasticsearch/xpack/security/signature/signing_rsa.crt" ).getParent ()
4041 );
4142
43+ var verifier = manager .verifier ();
44+
4245 assertThat (signature .algorithm (), equalToIgnoringCase (keyConfig .getKeys ().getFirst ().v2 ().getSigAlgName ()));
43- assertEquals (signature .certificate (), keyConfig .getKeys ().getFirst ().v2 ());
46+ assertEquals (signature .certificates ()[0 ], keyConfig .getKeys ().getFirst ().v2 ());
47+ assertTrue (verifier .verify (signature , testHeaders ));
4448 }
4549
4650 public void testSignUnknownClusterAlias () {
47- final CrossClusterApiKeySigner signer = getCrossClusterApiKeySignerInstance ();
51+ final CrossClusterApiKeySignatureManager manager = getCrossClusterApiKeySignatureManagerInstance ();
4852 final String [] testHeaders = randomArray (5 , String []::new , () -> randomAlphanumericOfLength (randomInt (20 )));
49-
50- X509CertificateSignature signature = signer .sign ("unknowncluster" , testHeaders );
53+ X509CertificateSignature signature = manager .signerForClusterAlias ("unknowncluster" ).sign (testHeaders );
5154 assertNull (signature );
5255 }
5356
5457 public void testSeveralKeyStoreAliases () {
55- final CrossClusterApiKeySigner signer = getCrossClusterApiKeySignerInstance ();
56-
58+ final CrossClusterApiKeySignatureManager manager = getCrossClusterApiKeySignatureManagerInstance ();
5759 try {
5860 // Create a new config without an alias. Since there are several aliases in the keystore, no signature should be generated
5961 updateClusterSettings (
@@ -69,7 +71,8 @@ public void testSeveralKeyStoreAliases() {
6971 );
7072
7173 {
72- X509CertificateSignature signature = signer .sign (DYNAMIC_TEST_CLUSTER_ALIAS , "test" , "test" );
74+ var signer = manager .signerForClusterAlias (DYNAMIC_TEST_CLUSTER_ALIAS );
75+ X509CertificateSignature signature = signer .sign ("test" , "test" );
7376 assertNull (signature );
7477 }
7578
@@ -79,7 +82,8 @@ public void testSeveralKeyStoreAliases() {
7982 .put (SIGNING_KEYSTORE_ALIAS .getConcreteSettingForNamespace (DYNAMIC_TEST_CLUSTER_ALIAS ).getKey (), "wholelottakey" )
8083 );
8184 {
82- X509CertificateSignature signature = signer .sign (DYNAMIC_TEST_CLUSTER_ALIAS , "test" , "test" );
85+ var signer = manager .signerForClusterAlias (DYNAMIC_TEST_CLUSTER_ALIAS );
86+ X509CertificateSignature signature = signer .sign ("test" , "test" );
8387 assertNotNull (signature );
8488 }
8589
@@ -89,7 +93,8 @@ public void testSeveralKeyStoreAliases() {
8993 .put (SIGNING_KEYSTORE_ALIAS .getConcreteSettingForNamespace (DYNAMIC_TEST_CLUSTER_ALIAS ).getKey (), "idonotexist" )
9094 );
9195 {
92- X509CertificateSignature signature = signer .sign (DYNAMIC_TEST_CLUSTER_ALIAS , "test" , "test" );
96+ var signer = manager .signerForClusterAlias (DYNAMIC_TEST_CLUSTER_ALIAS );
97+ X509CertificateSignature signature = signer .sign ("test" , "test" );
9398 assertNotNull (signature );
9499 }
95100 } finally {
@@ -103,10 +108,28 @@ public void testSeveralKeyStoreAliases() {
103108 }
104109 }
105110
111+ public void testVerifyDiagnosticTrustManagerDisabled () {
112+ final CrossClusterApiKeySignatureManager manager = getCrossClusterApiKeySignatureManagerInstance ();
113+
114+ try {
115+ updateClusterSettings (Settings .builder ().put (DIAGNOSE_TRUST_EXCEPTIONS .getKey (), false ));
116+ assertFalse (manager .getTrustManager () instanceof DiagnosticTrustManager );
117+ } finally {
118+ updateClusterSettings (Settings .builder ().putNull (DIAGNOSE_TRUST_EXCEPTIONS .getKey ()));
119+ }
120+ }
121+
122+ public void testVerifyDiagnosticTrustManagerEnabledDefault () {
123+ final CrossClusterApiKeySignatureManager manager = getCrossClusterApiKeySignatureManagerInstance ();
124+
125+ assertTrue (manager .getTrustManager () instanceof DiagnosticTrustManager );
126+ }
127+
106128 @ Override
107129 protected Settings nodeSettings (int nodeOrdinal , Settings otherSettings ) {
108130 var builder = Settings .builder ();
109131 MockSecureSettings secureSettings = (MockSecureSettings ) builder .put (super .nodeSettings (nodeOrdinal , otherSettings ))
132+ .put (SIGNING_CERTIFICATE_AUTHORITIES .getKey (), getDataPath ("/org" + "/elasticsearch/xpack/security/signature/root.crt" ))
110133 .put (
111134 SIGNING_CERT_PATH .getConcreteSettingForNamespace (STATIC_TEST_CLUSTER_ALIAS ).getKey (),
112135 getDataPath ("/org/elasticsearch/xpack/security/signature/signing_rsa.crt" )
@@ -123,8 +146,8 @@ protected Settings nodeSettings(int nodeOrdinal, Settings otherSettings) {
123146 return builder .build ();
124147 }
125148
126- private static CrossClusterApiKeySigner getCrossClusterApiKeySignerInstance () {
127- return CrossClusterTestHelper .getCrossClusterApiKeySigner (internalCluster ());
149+ private static CrossClusterApiKeySignatureManager getCrossClusterApiKeySignatureManagerInstance () {
150+ return CrossClusterTestHelper .getCrossClusterApiKeySignatureManager (internalCluster ());
128151 }
129152
130153}
0 commit comments