ModIKeystoreUtils.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.protocol.utils;

  21. import java.util.List;

  22. import org.openspcoop2.core.commons.DBUtils;
  23. import org.openspcoop2.core.config.ServizioApplicativo;
  24. import org.openspcoop2.core.constants.CostantiDB;
  25. import org.openspcoop2.core.constants.CostantiLabel;
  26. import org.openspcoop2.core.id.IDSoggetto;
  27. import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
  28. import org.openspcoop2.core.registry.ProtocolProperty;
  29. import org.openspcoop2.protocol.sdk.ProtocolException;
  30. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  31. import org.openspcoop2.utils.UtilsException;
  32. import org.openspcoop2.utils.certificate.KeystoreParams;
  33. import org.openspcoop2.utils.certificate.KeystoreType;
  34. import org.openspcoop2.utils.certificate.byok.BYOKProvider;
  35. import org.openspcoop2.utils.certificate.hsm.HSMUtils;
  36. import org.openspcoop2.utils.transport.http.HttpUtilities;

  37. /**
  38.  * ModIKeystoreUtils
  39.  *
  40.  * @author Poli Andrea (apoli@link.it)
  41.  * @author $Author$
  42.  * @version $Rev$, $Date$
  43.  */
  44. public class ModIKeystoreUtils {

  45.     protected String securityMessageKeystoreMode = null;
  46.     protected byte[] securityMessageKeystoreArchive = null;
  47.     protected String securityMessageKeystoreType = null;
  48.     protected boolean securityMessageKeystoreHSM = false;
  49.     protected String securityMessageKeystorePath = null;
  50.     protected String securityMessageKeystorePathPublicKey = null;
  51.     protected String securityMessageKeystoreKeyAlgorithm = null;
  52.     protected String securityMessageKeystorePassword = null;
  53.     protected String securityMessageKeystoreByokPolicy = null;

  54.     protected String securityMessageKeyAlias = null;
  55.     protected String securityMessageKeyPassword = null;
  56.    
  57.     public ModIKeystoreUtils() throws ProtocolException, UtilsException {
  58.         // nop per altri costruttori
  59.     }
  60.    
  61.     public ModIKeystoreUtils(ServizioApplicativo sa, String securityMessageProfile) throws ProtocolException, UtilsException {
  62.        
  63.         boolean securityMessageProfileDefinedApplicativo = ProtocolPropertiesUtils.getBooleanValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_SICUREZZA_MESSAGGIO, false);
  64.         if(!securityMessageProfileDefinedApplicativo) {
  65.             ProtocolException pe = new ProtocolException("Il profilo di sicurezza richiesto '"+securityMessageProfile+"' non è applicabile poichè l'applicativo mittente "+sa.getNome()+" ("+sa.getNomeSoggettoProprietario()+") non possiede una configurazione dei parametri di sicurezza messaggio (Keystore)");
  66.             pe.setInteroperabilityError(true);
  67.             throw pe;
  68.         }
  69.        
  70.         this.securityMessageKeystoreMode = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_MODE);
  71.         if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_HSM.equals(this.securityMessageKeystoreMode)) {
  72.             this.securityMessageKeystoreHSM = true;
  73.         }
  74.         else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(this.securityMessageKeystoreMode)) {
  75.             this.securityMessageKeystoreArchive = ProtocolPropertiesUtils.getRequiredBinaryValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_ARCHIVE);
  76.         }
  77.         else {
  78.             this.securityMessageKeystorePath = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_PATH);
  79.            
  80.             try {
  81.                 HttpUtilities.validateUri(this.securityMessageKeystorePath, true);
  82.             }catch(Exception e) {
  83.                 throw new ProtocolException("["+this.securityMessageKeystorePath+"] "+e.getMessage(),e);
  84.             }
  85.         }
  86.        
  87.         this.securityMessageKeystoreType = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_TYPE);
  88.    
  89.         if(this.securityMessageKeystoreHSM) {
  90.             this.securityMessageKeystorePath = HSMUtils.KEYSTORE_HSM_PREFIX+this.securityMessageKeystoreType;
  91.         }
  92.        
  93.         if(!this.securityMessageKeystoreHSM) {
  94.             if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  95.                 this.securityMessageKeystorePathPublicKey = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_PATH_PUBLIC_KEY);
  96.             }
  97.            
  98.             if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) ||
  99.                 CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  100.                 this.securityMessageKeystoreKeyAlgorithm = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_KEY_ALGORITHM);
  101.             }
  102.         }
  103.        
  104.         if(!this.securityMessageKeystoreHSM) {
  105.             if(!CostantiDB.KEYSTORE_TYPE_JWK.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  106.                     !CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  107.                     !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  108.                 boolean required = true;
  109.                 if(
  110.                         (KeystoreType.JKS.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystoreJksPasswordRequired())
  111.                         ||
  112.                         (KeystoreType.PKCS12.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystorePkcs12PasswordRequired())
  113.                 ) {
  114.                     required = false;
  115.                 }
  116.                 if(required) {
  117.                     this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  118.                 }
  119.                 else {
  120.                     this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  121.                 }
  122.             }
  123.             else {
  124.                 this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  125.             }
  126.         }
  127.         else {
  128.             this.securityMessageKeystorePassword = HSMUtils.KEYSTORE_HSM_STORE_PASSWORD_UNDEFINED;
  129.         }
  130.        
  131.         if(!this.securityMessageKeystoreHSM && !CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(this.securityMessageKeystoreMode)) {
  132.             this.securityMessageKeystoreByokPolicy = ProtocolPropertiesUtils.getOptionalStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEYSTORE_BYOK_POLICY);
  133.         }
  134.         else {
  135.             this.securityMessageKeystoreByokPolicy = BYOKProvider.BYOK_POLICY_UNDEFINED;
  136.         }
  137.        
  138.         if(!CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  139.                 !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  140.             this.securityMessageKeyAlias = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEY_ALIAS);
  141.         }
  142.        
  143.         if(!this.securityMessageKeystoreHSM) {
  144.             if(!CostantiDB.KEYSTORE_TYPE_JWK.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  145.                     !CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  146.                     !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  147.                 boolean required = true;
  148.                 if(
  149.                         (KeystoreType.JKS.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystoreJksKeyPasswordRequired())
  150.                         ||
  151.                         (KeystoreType.PKCS12.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystorePkcs12KeyPasswordRequired())
  152.                 ) {
  153.                     required = false;
  154.                 }
  155.                 if(required) {
  156.                     this.securityMessageKeyPassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEY_PASSWORD);
  157.                 }
  158.                 else {
  159.                     this.securityMessageKeyPassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEY_PASSWORD);
  160.                 }
  161.             }
  162.             else {
  163.                 this.securityMessageKeyPassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEY_PASSWORD);
  164.             }
  165.         }
  166.         else if(HSMUtils.isHsmConfigurableKeyPassword()) {
  167.             this.securityMessageKeyPassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyConfig(sa.getProtocolPropertyList(), CostantiDB.MODIPA_KEY_PASSWORD);
  168.         }
  169.         else {
  170.             this.securityMessageKeyPassword = HSMUtils.KEYSTORE_HSM_PRIVATE_KEY_PASSWORD_UNDEFINED;
  171.         }
  172.        
  173.     }
  174.    
  175.     public ModIKeystoreUtils(boolean fruizione, IDSoggetto soggettoFruitore, AccordoServizioParteSpecifica asps, String securityMessageProfile,
  176.             String modIpropertiesSecurityMessageKeystoreType,
  177.             String modIpropertiesSecurityMessageKeystorePath,
  178.             String modIpropertiesSecurityMessageKeystorePassword,
  179.             String modIpropertiesSecurityMessageKeyAlias,
  180.             String modIpropertiesSecurityMessageKeyPassword) throws ProtocolException, UtilsException {
  181.        
  182.         try {
  183.             List<ProtocolProperty> listProtocolProperties = ProtocolPropertiesUtils.getProtocolProperties(fruizione, soggettoFruitore, asps);
  184.            
  185.             String prefix = CostantiLabel.MODIPA_API_IMPL_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE_LABEL;
  186.            
  187.             String mode = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties,
  188.                     CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_KEYSTORE_MODE);
  189.             boolean ridefinisci = CostantiDB.MODIPA_PROFILO_RIDEFINISCI.equals(mode);
  190.             boolean undefined = CostantiDB.MODIPA_PROFILO_UNDEFINED.equals(mode);
  191.            
  192.             if(ridefinisci) {
  193.            
  194.                 this.securityMessageKeystoreMode = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_MODE);
  195.                 if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_HSM.equals(this.securityMessageKeystoreMode)) {
  196.                     this.securityMessageKeystoreHSM = true;
  197.                 }
  198.                 else if(CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(this.securityMessageKeystoreMode)) {
  199.                     this.securityMessageKeystoreArchive = ProtocolPropertiesUtils.getRequiredBinaryValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_ARCHIVE);
  200.                 }
  201.                 else {
  202.                     this.securityMessageKeystorePath = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_PATH);
  203.                    
  204.                     try {
  205.                         HttpUtilities.validateUri(this.securityMessageKeystorePath, true);
  206.                     }catch(Exception e) {
  207.                         throw new ProtocolException("["+this.securityMessageKeystorePath+"] "+e.getMessage(),e);
  208.                     }
  209.                 }
  210.                
  211.                 this.securityMessageKeystoreType = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_TYPE);
  212.                
  213.                 if(this.securityMessageKeystoreHSM) {
  214.                     this.securityMessageKeystorePath = HSMUtils.KEYSTORE_HSM_PREFIX+this.securityMessageKeystoreType;
  215.                 }
  216.                
  217.                 if(!this.securityMessageKeystoreHSM) {
  218.                     if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  219.                         this.securityMessageKeystorePathPublicKey = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_PATH_PUBLIC_KEY);
  220.                     }
  221.                    
  222.                     if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) ||
  223.                         CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  224.                         this.securityMessageKeystoreKeyAlgorithm = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_KEY_ALGORITHM);
  225.                     }
  226.                 }
  227.                
  228.                 if(!this.securityMessageKeystoreHSM) {
  229.                     if(!CostantiDB.KEYSTORE_TYPE_JWK.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  230.                         !CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  231.                         !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  232.                         boolean required = true;
  233.                         if(
  234.                                 (KeystoreType.JKS.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystoreJksPasswordRequired())
  235.                                 ||
  236.                                 (KeystoreType.PKCS12.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystorePkcs12PasswordRequired())
  237.                         ) {
  238.                             required = false;
  239.                         }
  240.                         if(required) {
  241.                             this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  242.                         }
  243.                         else {
  244.                             this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  245.                         }
  246.                     }
  247.                     else {
  248.                         this.securityMessageKeystorePassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_PASSWORD);
  249.                     }
  250.                 }
  251.                 else {
  252.                     this.securityMessageKeystorePassword = HSMUtils.KEYSTORE_HSM_STORE_PASSWORD_UNDEFINED;
  253.                 }
  254.                
  255.                 if(!this.securityMessageKeystoreHSM && !CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(this.securityMessageKeystoreMode)) {
  256.                     this.securityMessageKeystoreByokPolicy = ProtocolPropertiesUtils.getOptionalStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEYSTORE_BYOK_POLICY);
  257.                 }
  258.                 else {
  259.                     this.securityMessageKeystoreByokPolicy = BYOKProvider.BYOK_POLICY_UNDEFINED;
  260.                 }
  261.                
  262.                 if(!CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  263.                         !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  264.                     this.securityMessageKeyAlias = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEY_ALIAS);
  265.                 }
  266.                
  267.                 if(!this.securityMessageKeystoreHSM) {
  268.                     if(!CostantiDB.KEYSTORE_TYPE_JWK.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  269.                             !CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  270.                             !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  271.                         boolean required = true;
  272.                         if(
  273.                                 (KeystoreType.JKS.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystoreJksKeyPasswordRequired())
  274.                                 ||
  275.                                 (KeystoreType.PKCS12.isType(this.securityMessageKeystoreType) && !DBUtils.isKeystorePkcs12KeyPasswordRequired())
  276.                         ) {
  277.                             required = false;
  278.                         }
  279.                         if(required) {
  280.                             this.securityMessageKeyPassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEY_PASSWORD);
  281.                         }
  282.                         else {
  283.                             this.securityMessageKeyPassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEY_PASSWORD);
  284.                         }
  285.                     }
  286.                     else {
  287.                         this.securityMessageKeyPassword = ProtocolPropertiesUtils.getOptionalStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEY_PASSWORD);
  288.                     }
  289.                 }
  290.                 else if(HSMUtils.isHsmConfigurableKeyPassword()) {
  291.                     this.securityMessageKeyPassword = ProtocolPropertiesUtils.getRequiredStringValuePropertyRegistry(listProtocolProperties, CostantiDB.MODIPA_KEY_PASSWORD);
  292.                 }
  293.                 else {
  294.                     this.securityMessageKeyPassword = HSMUtils.KEYSTORE_HSM_PRIVATE_KEY_PASSWORD_UNDEFINED;
  295.                 }
  296.                
  297.             }
  298.             else if(undefined) {
  299.                 throw new ProtocolException(prefix+" non definito");
  300.             }
  301.             else {
  302.                
  303.                 this.securityMessageKeystoreType = modIpropertiesSecurityMessageKeystoreType;
  304.                 if(this.securityMessageKeystoreType!=null) {
  305.                    
  306.                     this.securityMessageKeystoreHSM = HSMUtils.isKeystoreHSM(this.securityMessageKeystoreType);
  307.                    
  308.                     if(this.securityMessageKeystoreHSM) {
  309.                         this.securityMessageKeystorePath = HSMUtils.KEYSTORE_HSM_PREFIX+this.securityMessageKeystoreType;
  310.                     }
  311.                     else {
  312.                    
  313.                         this.securityMessageKeystorePath = modIpropertiesSecurityMessageKeystorePath;
  314.                         try {
  315.                             HttpUtilities.validateUri(this.securityMessageKeystorePath, true);
  316.                         }catch(Exception e) {
  317.                             throw new ProtocolException(prefix+" ["+this.securityMessageKeystorePath+"] "+e.getMessage(),e);
  318.                         }
  319.                        
  320.                     }
  321.                    
  322.                     if(!this.securityMessageKeystoreHSM) {
  323.                         this.securityMessageKeystorePassword = modIpropertiesSecurityMessageKeystorePassword;
  324.                     }
  325.                     else {
  326.                         this.securityMessageKeystorePassword = HSMUtils.KEYSTORE_HSM_STORE_PASSWORD_UNDEFINED;
  327.                     }
  328.                    
  329.                     this.securityMessageKeyAlias = modIpropertiesSecurityMessageKeyAlias;
  330.                    
  331.                     if(!this.securityMessageKeystoreHSM || HSMUtils.isHsmConfigurableKeyPassword()) {
  332.                         this.securityMessageKeyPassword = modIpropertiesSecurityMessageKeyPassword;
  333.                     }
  334.                     else {
  335.                         this.securityMessageKeyPassword = HSMUtils.KEYSTORE_HSM_PRIVATE_KEY_PASSWORD_UNDEFINED;
  336.                     }
  337.                 }
  338.                
  339.             }
  340.            
  341.             if(this.securityMessageKeystoreArchive==null && this.securityMessageKeystorePath==null) {
  342.                 throw new ProtocolException(prefix+" non definito");
  343.             }
  344.            
  345.         }catch(Exception e) {
  346.             throw new ProtocolException(e);
  347.         }
  348.        
  349.     }
  350.    
  351.     public ModIKeystoreUtils(KeystoreParams kp) throws ProtocolException, UtilsException {
  352.        
  353.         this.securityMessageKeystoreHSM = HSMUtils.isKeystoreHSM(kp.getType());
  354.        
  355.         if(!this.securityMessageKeystoreHSM) {
  356.             this.securityMessageKeystorePath = kp.getPath();
  357.            
  358.             try {
  359.                 HttpUtilities.validateUri(this.securityMessageKeystorePath, true);
  360.             }catch(Exception e) {
  361.                 throw new ProtocolException("["+this.securityMessageKeystorePath+"] "+e.getMessage(),e);
  362.             }
  363.         }
  364.        
  365.         this.securityMessageKeystoreType = kp.getType();
  366.    
  367.         if(this.securityMessageKeystoreHSM) {
  368.             this.securityMessageKeystorePath = HSMUtils.KEYSTORE_HSM_PREFIX+this.securityMessageKeystoreType;
  369.         }
  370.        
  371.         if(!this.securityMessageKeystoreHSM) {
  372.             if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  373.                 this.securityMessageKeystorePathPublicKey = kp.getKeyPairPublicKeyPath();
  374.             }
  375.            
  376.             if(CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) ||
  377.                 CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  378.                 this.securityMessageKeystoreKeyAlgorithm = kp.getKeyPairAlgorithm();
  379.             }
  380.         }
  381.        
  382.         if(!this.securityMessageKeystoreHSM) {
  383.             this.securityMessageKeystorePassword = kp.getPassword();
  384.         }
  385.         else {
  386.             this.securityMessageKeystorePassword = HSMUtils.KEYSTORE_HSM_STORE_PASSWORD_UNDEFINED;
  387.         }
  388.        
  389.         if(!this.securityMessageKeystoreHSM && !CostantiDB.MODIPA_KEYSTORE_MODE_VALUE_ARCHIVE.equals(this.securityMessageKeystoreMode)) {
  390.             this.securityMessageKeystoreByokPolicy = kp.getByokPolicy();
  391.         }
  392.         else {
  393.             this.securityMessageKeystoreByokPolicy = BYOKProvider.BYOK_POLICY_UNDEFINED;
  394.         }
  395.        
  396.         if(!CostantiDB.KEYSTORE_TYPE_KEY_PAIR.equalsIgnoreCase(this.securityMessageKeystoreType) &&
  397.                 !CostantiDB.KEYSTORE_TYPE_PUBLIC_KEY.equalsIgnoreCase(this.securityMessageKeystoreType)) {
  398.             this.securityMessageKeyAlias = kp.getKeyAlias();
  399.         }
  400.        
  401.         if(!this.securityMessageKeystoreHSM) {
  402.             this.securityMessageKeyPassword = kp.getKeyPassword();
  403.         }
  404.         else if(HSMUtils.isHsmConfigurableKeyPassword()) {
  405.             this.securityMessageKeyPassword = kp.getKeyPassword();
  406.         }
  407.         else {
  408.             this.securityMessageKeyPassword = HSMUtils.KEYSTORE_HSM_PRIVATE_KEY_PASSWORD_UNDEFINED;
  409.         }
  410.     }
  411.    
  412.     public String getSecurityMessageKeyAlias() {
  413.         return this.securityMessageKeyAlias;
  414.     }

  415.     public String getSecurityMessageKeystoreType() {
  416.         return this.securityMessageKeystoreType;
  417.     }

  418.     public boolean isSecurityMessageKeystoreHSM() {
  419.         return this.securityMessageKeystoreHSM;
  420.     }
  421.    
  422.     public String getSecurityMessageKeystoreMode() {
  423.         return this.securityMessageKeystoreMode;
  424.     }

  425.     public byte[] getSecurityMessageKeystoreArchive() {
  426.         return this.securityMessageKeystoreArchive;
  427.     }

  428.     public String getSecurityMessageKeystorePath() {
  429.         return this.securityMessageKeystorePath;
  430.     }

  431.     public String getSecurityMessageKeystorePassword() {
  432.         return this.securityMessageKeystorePassword;
  433.     }

  434.     public String getSecurityMessageKeystoreByokPolicy() {
  435.         return this.securityMessageKeystoreByokPolicy;
  436.     }
  437.    
  438.     public String getSecurityMessageKeyPassword() {
  439.         return this.securityMessageKeyPassword;
  440.     }
  441.    
  442.     public String getSecurityMessageKeystorePathPublicKey() {
  443.         return this.securityMessageKeystorePathPublicKey;
  444.     }

  445.     public String getSecurityMessageKeystoreKeyAlgorithm() {
  446.         return this.securityMessageKeystoreKeyAlgorithm;
  447.     }
  448. }