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

smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 314f7e9d8 KNOX-3118 - Use SHA256 as Knox Default Self-Signing 
algorithm for SSL… (#1015)
314f7e9d8 is described below

commit 314f7e9d85006bdb6983dda21f03cb1563529642
Author: KnightChen <[email protected]>
AuthorDate: Wed Apr 9 15:32:24 2025 +0800

    KNOX-3118 - Use SHA256 as Knox Default Self-Signing algorithm for SSL… 
(#1015)
---
 .../provider/federation/AbstractJWTFilterTest.java | 11 ++++---
 .../gateway/config/impl/GatewayConfigImpl.java     |  5 +++
 .../security/impl/DefaultKeystoreService.java      |  6 ++--
 .../security/impl/DefaultKeystoreServiceTest.java  | 36 +++++++++++++---------
 .../impl/DefaultTokenAuthorityServiceTest.java     | 12 ++++++++
 .../apache/knox/gateway/websockets/BadUrlTest.java |  1 +
 .../knox/gateway/websockets/JWTValidatorTest.java  |  2 +-
 .../gateway/websockets/WebsocketEchoTestBase.java  |  1 +
 .../WebsocketMultipleConnectionTest.java           |  1 +
 .../org/apache/knox/gateway/GatewayTestConfig.java |  5 +++
 .../apache/knox/gateway/config/GatewayConfig.java  |  7 +++++
 .../knox/gateway/util/X509CertificateUtil.java     |  2 +-
 12 files changed, 65 insertions(+), 24 deletions(-)

diff --git 
a/gateway-provider-security-jwt/src/test/java/org/apache/knox/gateway/provider/federation/AbstractJWTFilterTest.java
 
b/gateway-provider-security-jwt/src/test/java/org/apache/knox/gateway/provider/federation/AbstractJWTFilterTest.java
index 6ad8b7d54..7ca72cd40 100644
--- 
a/gateway-provider-security-jwt/src/test/java/org/apache/knox/gateway/provider/federation/AbstractJWTFilterTest.java
+++ 
b/gateway-provider-security-jwt/src/test/java/org/apache/knox/gateway/provider/federation/AbstractJWTFilterTest.java
@@ -27,6 +27,7 @@ import com.nimbusds.jose.crypto.RSASSAVerifier;
 import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.jwt.SignedJWT;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.knox.gateway.config.GatewayConfig;
 import 
org.apache.knox.gateway.provider.federation.jwt.filter.AbstractJWTFilter;
 import 
org.apache.knox.gateway.provider.federation.jwt.filter.SSOCookieFederationFilter;
 import 
org.apache.knox.gateway.provider.federation.jwt.filter.SignatureVerificationCache;
@@ -107,7 +108,7 @@ public abstract class AbstractJWTFilterTest  {
     kpg.initialize(2048);
     KeyPair KPair = kpg.generateKeyPair();
     String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-    Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
"SHA1withRSA");
+    Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG);
     byte[] data = cert.getEncoded();
     Base64 encoder = new Base64( 76, "\n".getBytes( StandardCharsets.US_ASCII 
) );
     pem = new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
@@ -655,7 +656,7 @@ public abstract class AbstractJWTFilterTest  {
 
       KeyPair KPair = kpg.generateKeyPair();
       String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, "SHA1withRSA");
+      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG );
       byte[] data = cert.getEncoded();
       Base64 encoder = new Base64( 76, "\n".getBytes( 
StandardCharsets.US_ASCII ) );
       String failingPem = new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
@@ -711,7 +712,7 @@ public abstract class AbstractJWTFilterTest  {
 
       KeyPair KPair = kpg.generateKeyPair();
       String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, "SHA1withRSA");
+      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG);
       byte[] data = cert.getEncoded();
       Base64 encoder = new Base64( 76, "\n".getBytes( 
StandardCharsets.US_ASCII ) );
       String failingPem = new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
@@ -770,7 +771,7 @@ public abstract class AbstractJWTFilterTest  {
 
       KeyPair KPair = kpg.generateKeyPair();
       String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, "SHA1withRSA");
+      Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG);
       byte[] data = cert.getEncoded();
       Base64 encoder = new Base64( 76, "\n".getBytes( 
StandardCharsets.US_ASCII ) );
       String failingPem = new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
@@ -865,7 +866,7 @@ public abstract class AbstractJWTFilterTest  {
 
     KeyPair KPair = kpg.generateKeyPair();
     String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-    Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
"SHA1withRSA");
+    Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG);
     byte[] data = cert.getEncoded();
     Base64 encoder = new Base64( 76, "\n".getBytes( StandardCharsets.US_ASCII 
) );
     return new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
index c61a8c557..2caef51d4 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
@@ -800,6 +800,11 @@ public class GatewayConfigImpl extends Configuration 
implements GatewayConfig {
     return get(CREDENTIAL_STORE_ALG, DEFAULT_CREDENTIAL_STORE_ALG);
   }
 
+  @Override
+  public String getSelfSigningCertificateAlgorithm() {
+    return get(SELF_SIGNING_CERT_ALG, DEFAULT_SELF_SIGNING_CERT_ALG);
+  }
+
   @Override
   public String getCredentialStoreType() {
     return get(CREDENTIAL_STORE_TYPE, DEFAULT_CREDENTIAL_STORE_TYPE);
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreService.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreService.java
index e51f904ae..e1e6a9b81 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreService.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreService.java
@@ -91,6 +91,7 @@ public class DefaultKeystoreService implements 
KeystoreService {
   private String credentialStoreAlgorithm;
   private String credentialStoreType;
   private String credentialsSuffix;
+  private String selfSigningCertificateAlgorithm;
 
   public void setMasterService(MasterService ms) {
     this.masterService = ms;
@@ -119,6 +120,7 @@ public class DefaultKeystoreService implements 
KeystoreService {
     this.credentialStoreAlgorithm = config.getCredentialStoreAlgorithm();
     this.credentialStoreType = config.getCredentialStoreType();
     this.credentialsSuffix = CREDENTIALS_SUFFIX + 
this.credentialStoreType.toLowerCase(Locale.ROOT);
+    this.selfSigningCertificateAlgorithm = 
config.getSelfSigningCertificateAlgorithm();
   }
 
   @Override
@@ -196,11 +198,11 @@ public class DefaultKeystoreService implements 
KeystoreService {
       X509Certificate cert;
       if(hostname.equals(CERT_GEN_MODE_HOSTNAME)) {
         String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-        cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
"SHA1withRSA");
+        cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
this.selfSigningCertificateAlgorithm);
       }
       else {
         String dn = buildDistinguishedName(hostname);
-        cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
"SHA1withRSA");
+        cert = X509CertificateUtil.generateCertificate(dn, KPair, 365, 
this.selfSigningCertificateAlgorithm);
       }
 
       KeyStore privateKS = getKeystoreForGateway();
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreServiceTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreServiceTest.java
index 85841c341..d65ba802d 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreServiceTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/DefaultKeystoreServiceTest.java
@@ -305,6 +305,10 @@ public class DefaultKeystoreServiceTest {
     Path defaultFile = 
baseDir.resolve("security").resolve("keystores").resolve("gateway.jks");
     String defaultAlias = "gateway-identity";
 
+    config.set(SIGNING_KEYSTORE_NAME, defaultFile.getFileName().toString());
+    config.set(IDENTITY_KEYSTORE_PATH, 
defaultFile.toAbsolutePath().toString());
+    config.set(IDENTITY_KEY_ALIAS, defaultAlias);
+
     DefaultKeystoreService keystoreService = new DefaultKeystoreService();
     keystoreService.setMasterService(masterService);
 
@@ -314,11 +318,11 @@ public class DefaultKeystoreServiceTest {
       fail("Not expecting ServiceLifecycleException due to missing signing 
keystore file since a custom one is not specified");
     }
 
-    createKeystore(keystoreService, defaultFile, defaultAlias, masterPassword);
+    createKeystore(keystoreService, masterPassword, config);
 
     keystoreService.init(config, Collections.emptyMap());
 
-    testSigningKeystore(keystoreService, defaultFile, defaultAlias, 
masterPassword);
+    testSigningKeystore(keystoreService, masterPassword, config);
 
     /* *******************
      * Test Custom Values
@@ -328,16 +332,17 @@ public class DefaultKeystoreServiceTest {
     String customKeyAlias = "custom_alias";
 
     config.set(SIGNING_KEYSTORE_NAME, customFileName);
+    config.set(IDENTITY_KEYSTORE_PATH, customFile.toAbsolutePath().toString());
     config.set(SIGNING_KEY_ALIAS, customKeyAlias);
 
     keystoreServiceAlt.setMasterService(masterService);
 
     // Ensure the signing keystore exists before init-ing the keystore service
-    createKeystore(keystoreService, customFile, customKeyAlias, 
masterPassword);
+    createKeystore(keystoreService, masterPassword, config);
 
     keystoreServiceAlt.init(config, Collections.emptyMap());
 
-    testSigningKeystore(keystoreServiceAlt, customFile, customKeyAlias, 
masterPassword);
+    testSigningKeystore(keystoreServiceAlt, masterPassword, config);
 
     /* *******************
      * Test Symlink Parent
@@ -365,17 +370,18 @@ public class DefaultKeystoreServiceTest {
     String symlinkKeyAlias = "symlink_alias";
 
     config.set(SIGNING_KEYSTORE_NAME, symlinkFileName);
+    config.set(IDENTITY_KEYSTORE_PATH, 
symlinkFile.toAbsolutePath().toString());
     config.set(SIGNING_KEY_ALIAS, symlinkKeyAlias);
     config.set(GatewayConfigImpl.SECURITY_DIR, symlinkSecurityDir.toString());
 
     keystoreServiceSymlink.setMasterService(masterService);
 
     // Ensure the signing keystore exists before init-ing the keystore service
-    createKeystore(keystoreService, symlinkFile, symlinkKeyAlias, 
masterPassword);
+    createKeystore(keystoreService, masterPassword, config);
 
     keystoreServiceSymlink.init(config, Collections.emptyMap());
 
-    testSigningKeystore(keystoreServiceSymlink, symlinkFile, symlinkKeyAlias, 
masterPassword);
+    testSigningKeystore(keystoreServiceSymlink, masterPassword, config);
 
 
     // Verify the keystore passwords are set properly...
@@ -531,7 +537,7 @@ public class DefaultKeystoreServiceTest {
     keystoreService.setMasterService(masterService);
     keystoreService.init(config, Collections.emptyMap());
 
-    createKeystore(keystoreService, 
Paths.get(config.getIdentityKeystorePath()), config.getIdentityKeyAlias(), 
masterPassword);
+    createKeystore(keystoreService, masterPassword, config);
 
     
assertNull(keystoreService.getKeyForGateway("wrongpassword".toCharArray()));
     assertNotNull(keystoreService.getKeyForGateway(masterPassword));
@@ -798,12 +804,11 @@ public class DefaultKeystoreServiceTest {
   }
 
   private void testSigningKeystore(KeystoreService keystoreService,
-                                   Path expectedKeystoreFilePath,
-                                   String keyAlias,
-                                   char[] masterPassword) throws Exception {
-    assertTrue(Files.exists(expectedKeystoreFilePath));
+                                   char[] masterPassword,
+                                   GatewayConfig config) throws Exception {
+    assertTrue(Files.exists(Paths.get(config.getIdentityKeystorePath())));
     assertNotNull(keystoreService.getSigningKeystore());
-    assertNotNull(keystoreService.getSigningKey(keyAlias, masterPassword));
+    assertNotNull(keystoreService.getSigningKey(config.getIdentityKeyAlias(), 
masterPassword));
   }
 
   private GatewayConfigImpl createGatewayConfig(Path baseDir) {
@@ -814,8 +819,9 @@ public class DefaultKeystoreServiceTest {
 
   }
 
-  private void createKeystore(DefaultKeystoreService keystoreService, Path 
keystoreFilePath, String alias, char[] password)
+  private void createKeystore(DefaultKeystoreService keystoreService, char[] 
password, final GatewayConfig config)
       throws KeystoreServiceException, KeyStoreException, 
CertificateException, NoSuchAlgorithmException, IOException {
+    Path keystoreFilePath = Paths.get(config.getIdentityKeystorePath());
     KeyStore keystore = keystoreService.createKeyStore(keystoreFilePath, 
"JKS", password);
 
     KeyPairGenerator keyPairGenerator;
@@ -827,9 +833,9 @@ public class DefaultKeystoreServiceTest {
         String.format(Locale.ROOT, 
"CN=%s,OU=Test,O=Hadoop,L=Test,ST=Test,C=US", this.getClass().getName()),
         keyPair,
         365,
-        "SHA1withRSA");
+        config.getSelfSigningCertificateAlgorithm());
 
-    keystore.setKeyEntry(alias, keyPair.getPrivate(),
+    keystore.setKeyEntry(config.getIdentityKeyAlias(), keyPair.getPrivate(),
         password,
         new java.security.cert.Certificate[]{cert});
 
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java
index 2efe15945..a11db4f10 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java
@@ -66,6 +66,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
@@ -115,6 +116,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
@@ -165,6 +167,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
@@ -213,6 +216,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
@@ -262,6 +266,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
@@ -316,6 +321,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
 
@@ -371,6 +377,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getKeystoreCacheSizeLimit()).andReturn(0L).anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createMock(MasterService.class);
     
EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()).atLeastOnce();
@@ -414,6 +421,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getKeystoreCacheSizeLimit()).andReturn(0L).anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createMock(MasterService.class);
     
EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()).atLeastOnce();
@@ -462,6 +470,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getKeystoreCacheSizeLimit()).andReturn(0L).anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createMock(MasterService.class);
     
EasyMock.expect(ms.getMasterSecret()).andReturn("invalid_password".toCharArray()).atLeastOnce();
@@ -510,6 +519,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getKeystoreCacheSizeLimit()).andReturn(0L).anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createMock(MasterService.class);
     
EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()).atLeastOnce();
@@ -558,6 +568,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getKeystoreCacheSizeLimit()).andReturn(0L).anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createMock(MasterService.class);
     
EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()).atLeastOnce();
@@ -606,6 +617,7 @@ public class DefaultTokenAuthorityServiceTest {
     
EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes();
     
EasyMock.expect(config.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(config.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(config.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     MasterService ms = EasyMock.createNiceMock(MasterService.class);
     EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray());
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
index 360f2da81..fdc71aa59 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/BadUrlTest.java
@@ -316,6 +316,7 @@ public class BadUrlTest {
 
     
EasyMock.expect(gatewayConfig.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(gatewayConfig.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(gatewayConfig.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     EasyMock.replay(gatewayConfig);
 
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/JWTValidatorTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/JWTValidatorTest.java
index f763314f9..e79bea6d7 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/JWTValidatorTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/JWTValidatorTest.java
@@ -91,7 +91,7 @@ public class JWTValidatorTest {
         kpg.initialize(2048);
         KeyPair KPair = kpg.generateKeyPair();
         String dn = 
buildDistinguishedName(InetAddress.getLocalHost().getHostName());
-        Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, "SHA1withRSA");
+        Certificate cert = X509CertificateUtil.generateCertificate(dn, KPair, 
365, GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG);
         byte[] data = cert.getEncoded();
         Base64 encoder = new Base64( 76, "\n".getBytes( 
StandardCharsets.US_ASCII ) );
         pem = new String(encoder.encodeToString( data ).getBytes( 
StandardCharsets.US_ASCII ), StandardCharsets.US_ASCII).trim();
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
index f3d9b6b5b..3c26466bd 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java
@@ -346,6 +346,7 @@ public class WebsocketEchoTestBase {
 
     
EasyMock.expect(gatewayConfig.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(gatewayConfig.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(gatewayConfig.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     EasyMock.replay(gatewayConfig);
 
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
index edcfeff63..00a1c2697 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketMultipleConnectionTest.java
@@ -379,6 +379,7 @@ public class WebsocketMultipleConnectionTest {
 
     
EasyMock.expect(gatewayConfig.getCredentialStoreType()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_TYPE).anyTimes();
     
EasyMock.expect(gatewayConfig.getCredentialStoreAlgorithm()).andReturn(GatewayConfig.DEFAULT_CREDENTIAL_STORE_ALG).anyTimes();
+    
EasyMock.expect(gatewayConfig.getSelfSigningCertificateAlgorithm()).andReturn(GatewayConfig.DEFAULT_SELF_SIGNING_CERT_ALG).anyTimes();
 
     EasyMock.replay(gatewayConfig);
 
diff --git 
a/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
 
b/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
index 3711419fd..ae8c65620 100644
--- 
a/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
+++ 
b/gateway-spi-common/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
@@ -461,6 +461,11 @@ public class GatewayTestConfig extends Configuration 
implements GatewayConfig {
     return DEFAULT_CREDENTIAL_STORE_ALG;
   }
 
+  @Override
+  public String getSelfSigningCertificateAlgorithm() {
+    return DEFAULT_SELF_SIGNING_CERT_ALG;
+  }
+
   @Override
   public String getCredentialStoreType() {
     return DEFAULT_CREDENTIAL_STORE_TYPE;
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java 
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
index 3718716cf..dd7b2441d 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
@@ -92,6 +92,8 @@ public interface GatewayConfig {
 
   String CREDENTIAL_STORE_ALG = "gateway.credential.store.alg";
   String DEFAULT_CREDENTIAL_STORE_ALG = "AES";
+  String SELF_SIGNING_CERT_ALG = "gateway.self.signing.cert.alg";
+  String DEFAULT_SELF_SIGNING_CERT_ALG = "SHA256withRSA";
   String CREDENTIAL_STORE_TYPE = "gateway.credential.store.type";
   String DEFAULT_CREDENTIAL_STORE_TYPE = "JCEKS";
 
@@ -266,6 +268,11 @@ public interface GatewayConfig {
    */
   String getCredentialStoreAlgorithm();
 
+  /**
+   * @return the algorithm that is used when generating a self-signing 
certificate.
+   */
+  String getSelfSigningCertificateAlgorithm();
+
   /**
    * @return the type of the credential store used by AliasService
    */
diff --git 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/util/X509CertificateUtil.java
 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/util/X509CertificateUtil.java
index e0ddaa303..b66ee8406 100644
--- 
a/gateway-util-common/src/main/java/org/apache/knox/gateway/util/X509CertificateUtil.java
+++ 
b/gateway-util-common/src/main/java/org/apache/knox/gateway/util/X509CertificateUtil.java
@@ -64,7 +64,7 @@ public class X509CertificateUtil {
    * @param dn the X.509 Distinguished Name, eg "CN=Test, L=London, C=GB"
    * @param pair the KeyPair
    * @param days how many days from now the Certificate is valid for
-   * @param algorithm the signing algorithm, eg "SHA1withRSA"
+   * @param algorithm the signing algorithm, eg "SHA256withRSA"
    * @return self-signed X.509 certificate
    */
   public static X509Certificate generateCertificate(String dn, KeyPair pair, 
int days, String algorithm) {

Reply via email to