2017-02-18 2 views
1

Я настроил новые сертификаты CA для сервера WSO2 Identity. Я использовал GREP и заменил wso2carbon.jks и заменил мой новый .jks.Ошибка при расшифровке пароля для профиля BPEL embeded_bps

Я думаю, что ошибочно заменил некоторые места, которых у меня не было бы. Может ли кто-нибудь сказать мне, какое место могло быть причиной исключения? Или это из-за какой-то другой проблемы?

org.wso2.carbon.identity.workflow.impl.WorkflowImplException: Error while decrypting the password for BPEL Profile embeded_bps 
     at org.wso2.carbon.identity.workflow.impl.dao.BPSProfileDAO.getBPSProfile(BPSProfileDAO.java:158) 
     at org.wso2.carbon.identity.workflow.impl.WorkflowImplServiceImpl.getBPSProfile(WorkflowImplServiceImpl.j 

    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.wso2.carbon.core.util.CryptoException: errorDuringDecryption 
     at org.wso2.carbon.core.util.CryptoUtil.decrypt(CryptoUtil.java:186) 
     at org.wso2.carbon.core.util.CryptoUtil.base64DecodeAndDecrypt(CryptoUtil.java:200) 
     at org.wso2.carbon.identity.workflow.impl.dao.BPSProfileDAO.decryptPassword(BPSProfileDAO.java:264) 
     at org.wso2.carbon.identity.workflow.impl.dao.BPSProfileDAO.getBPSProfile(BPSProfileDAO.java:156) 
     ... 108 more 
Caused by: java.security.InvalidKeyException: unknown key type passed to RSA 
     at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineInit(Unknown Source) 
     at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineInit(Unknown Source) 
     at javax.crypto.Cipher.init(Cipher.java:1065) 
     at javax.crypto.Cipher.init(Cipher.java:1009) 
     at org.wso2.carbon.core.util.CryptoUtil.decrypt(CryptoUtil.java:181) 

... подробнее 111

+0

У вас включен BPS AnalyticsServerProfile? – Bee

+0

Я не сделал ничего специально, чтобы включить его. Я использую предварительно упакованную версию ... Я только что установил свои новые сертификаты – Jocket

+0

Вы нашли решение? У меня есть то же самое после обновления ssl cert с псевдонимом wso2carbon. Документы wso2 явно говорят, что это нормально, но когда вы меняете его, все перестает работать :( –

ответ

0

Вы должны найти эту таблицу: WF_BPS_PROFILE с этим colums: HOST_URL_MANAGER, HOST_URL_WORKER, USERNAME, PASSWORD

Я думаю, что значение ПАРОЛЬ было encripted с предыдущий ключ в wso2cabon.jks, поэтому вам нужно заменить это значение на новое.

Для получения дополнительной информации Вы можете найти класс BPSProfileDAO.java

И определение метода:

/** 
    * Retrieve details of a BPS profile 
    * 
    * @param profileName  Name of profile to retrieve 
    * @param tenantId  Id of tenant domain 
    * @param isWithPasswords Whether password to be retrieved or not 
    * @return 
    * @throws WorkflowImplException 
    */ 
    public BPSProfile getBPSProfile(String profileName, int tenantId, boolean isWithPasswords) throws 
                           WorkflowImplException 
{ 

     BPSProfile bpsProfileDTO = null; 
     Connection connection = IdentityDatabaseUtil.getDBConnection(); 
     PreparedStatement prepStmt = null; 
     ResultSet rs; 
     String query = SQLConstants.GET_BPS_PROFILE_FOR_TENANT_QUERY; 

     try { 
      prepStmt = connection.prepareStatement(query); 
      prepStmt.setString(1, profileName); 
      prepStmt.setInt(2, tenantId); 
      rs = prepStmt.executeQuery(); 

      if (rs.next()) { 
       String managerHostName = rs.getString(SQLConstants.HOST_URL_MANAGER_COLUMN); 
       String workerHostName = rs.getString(SQLConstants.HOST_URL_WORKER_COLUMN); 
       String user = rs.getString(SQLConstants.USERNAME_COLUMN); 
       bpsProfileDTO = new BPSProfile(); 
       bpsProfileDTO.setProfileName(profileName); 
       bpsProfileDTO.setManagerHostURL(managerHostName); 
       bpsProfileDTO.setWorkerHostURL(workerHostName); 
       bpsProfileDTO.setUsername(user); 

       if (isWithPasswords) { 
        String password = rs.getString(SQLConstants.PASSWORD_COLUMN); 
        try { 
         bpsProfileDTO.setPassword(decryptPassword(password)); 
        } catch (CryptoException | UnsupportedEncodingException e) { 
         throw new WorkflowImplException("Error while decrypting the password for BPEL Profile " 
           + profileName, e); 
        } 
       } 
      } 
     } catch (SQLException e) { 
      throw new WorkflowImplException("Error when executing the sql.", e); 
     } finally { 
      IdentityDatabaseUtil.closeAllConnections(connection, null, prepStmt); 
     } 
     return bpsProfileDTO; 
    } 

Запрос:

public static final String GET_BPS_PROFILE_FOR_TENANT_QUERY = "SELECT HOST_URL_MANAGER, HOST_URL_WORKER, " + 
     "USERNAME,PASSWORD FROM WF_BPS_PROFILE WHERE PROFILE_NAME = ? AND " + 
     "TENANT_ID = ? "; 

Некоторые методы UTIL:

private String encryptPassword(char[] passwordValue) throws CryptoException { 

    CryptoUtil cryptoUtil = CryptoUtil.getDefaultCryptoUtil(); 
    return cryptoUtil.encryptAndBase64Encode(toBytes(passwordValue)); 
} 



private char[] decryptPassword(String passwordValue) throws UnsupportedEncodingException, CryptoException { 

    CryptoUtil cryptoUtil = CryptoUtil.getDefaultCryptoUtil(); 
    byte[] decryptedPasswordBytes = cryptoUtil.base64DecodeAndDecrypt(passwordValue); 
    return (new String(decryptedPasswordBytes, WFImplConstant.DEFAULT_CHARSET)).toCharArray(); 

} 

/** 
* Convert a char array into a byte array 
* 
* @param chars 
* @return 
*/ 
private byte[] toBytes(char[] chars) { 
    CharBuffer charBuffer = CharBuffer.wrap(chars); 
    ByteBuffer byteBuffer = Charset.forName(WFImplConstant.DEFAULT_CHARSET).encode(charBuffer); 
    byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), 
      byteBuffer.position(), byteBuffer.limit()); 
    Arrays.fill(charBuffer.array(), '\u0000'); 
    Arrays.fill(byteBuffer.array(), (byte) 0); 
    return bytes; 
} 
+0

Yup. Попробуйте очистить таблицу и перезапустить эту ошибку. встроенный bps, который поставляется с wso2. При первом запуске мы шифруем пароль по умолчанию, который является пустой строкой, и помещаем его в базу данных. – farasath

0

В целом, такие ошибки могут возникать, когда сервер уже сохранил определенные данные (например. пароли), зашифрованные открытым ключом в хранилище ключей по умолчанию. Поэтому, когда вы меняете хранилище ключей, он больше не может расшифровывать эти данные. Поэтому в идеале вы должны изменить хранилища ключей как первое, что нужно для развертывания вашей продукции.

В вашем случае вы можете попробовать изменить <Credential> под <ServerProfile> соответственно (возможно, securePassword="false").

Прочтите this и this для деталей.

+0

У какого файла есть это свойство? Я не могу найти это свойство вообще – Jocket

Смежные вопросы