2017-02-18 4 views
1

WS02 Identity server에 대한 새 CA 인증서가 구성되었습니다. 나는 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

해결책을 찾았습니까? 별칭 wso2carbon을 사용하여 SSL 인증서를 업데이트 한 후 동일한 문제가 발생했습니다. wso2 워드 프로세서는 명시 적으로 괜찮 았지 만 변경하면 모든 것이 작동하지 않습니다. ( –

답변

0

이 colums와 WF_BPS_PROFILE을 : HOST_URL_MANAGER, HOST_URL_WORKER, 사용자 이름, 암호

내가 PASSWORD의 값으로 encripted 것을 생각 이전 키는 wso2cabon.jks에 있으므로 새 값으로 대체해야합니다.

/** 
    * 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; 
} 
당신이 클래스 BPSProfileDAO.java

그리고 메소드 정의를 찾을 수 있습니다 자세한 내용은

+0

으로 업데이트해야합니다. 테이블을 지우고이 오류를 다시 시작하십시오. wso2와 함께 제공되는 임베디드 bps입니다. 첫 번째 시작시 빈 문자열 인 기본 암호를 암호화하여 데이터베이스에 저장합니다. – farasath

0

일반적으로 서버가 이미 특정 데이터를 저장 한 경우 이러한 오류가 발생할 수 있습니다 (예 : 암호)를 기본 키 저장소의 공개 키로 암호화합니다. 따라서 키 저장소를 변경하면 더 이상 해당 데이터를 해독 할 수 없습니다. 따라서 이상적으로는 프로덕션 배포에서 키 스토어를 가장 먼저 변경해야합니다.

귀하의 경우 <Credential><ServerProfile>으로 적절히 변경하십시오 (현재는 securePassword="false"으로 설정 가능).

자세한 내용은 thisthis을 참조하십시오.

+0

이 속성을 가진 파일은 무엇입니까? 이 속성을 전혀 찾을 수 없습니다. – Jocket