예를 들어 채널에서 패스워드를 관리한다면 PO개발 채널의 디스크립션의 패스워드를 삭제하고 품질이나 운영서버에 이관후에 엑티브하는 하는 경우에 패스워드를 찾을수 없습니다.
그렇다고 해서 SAP PI/PO의 Directory API를 사용해서 외부에서 채널의 정보를 가져온다고 해도 패스워드를 확인할수 없었습니다.
그럼 어떻게 해야 패스워드를 안전하게 관리를 할수 있을까요?
일단 아래의 SimpleQuery 기능을 통해서 XML로 가능한 ESR, ID 오브젝트를 확인이 가능합니다.http://[po_host]:[po_port]/rep/support/SimpleQuery
http://[po_host]:[po_port]/dir/support/SimpleQuery
문서화 안된 기능이라고 하고 PO를 한지 오래 되었지만 이런기능은 생소하네요. 하지만 Directory API로 볼수 없는 정보로 확인이 가능한것 같습니다.
사용방법은
찾을려고 하는 PO오브젝트 조건을 넣고 조회를 하면 하단에 raw data를 볼수 있는 링크가 생성이 되는데요. 미가공 데이터 즉 원자료라고 하네요. 생성된 채널 링크를 누르게 되면 채널관련 정보가 xml포맷으로 출력이 됩니다.
이 정보들 중에 'dbpassword' 를 검색하면 encryption이 'hw'라고 되어있는데 혹시 Hardware Encryption을 뜻하는건지 모르겠네요. 패스워드는 확인이 되지만 Base64 Encode처럼 되있는것 같아 Decode를 해보니 이상하게 나오네요. 이 데이터를 복호화 할수 있는 방법이 있을까 찾아보니 어느분이 Communication channel password recovery 제목으로 raw 데이터로 확인된 패스워드를 복호화
할수 있는 소스를 아래와 같이 올려주셨네요.
import java.util.Base64
public class CHANNEL_PASSWORD{
public static void main(String[] args) throws Exception {
System.out.println(new String(getPassword(Base64.getDecoder().decode(args[0]))));
}
public static byte[] getPassword(byte[] aByteArray) throws Exception{
if((aByteArray == null) || (aByteArray.length == 0)) {
throw new Exception("no password given");
}
if(aByteArray[0] i= 1){
return null;
}
int len = aByteArray.length;
byte[] result = new byte[len - 1];
for(int i=1; i<len; i++){
result[(len - 1 - i)] = ((byte)(aByteArray[i] ^ 0x74));
}
return result;
}
}
위소스를 통해 raw 데이터에서 가져온 패스워드를 넣어서 실행하면 신기하게도 암호화 되어있던 패스워드가 정상적으로 복호화되서 잘 보입니다.
이걸가지고 ID 툴을 직접 접속해서 채널 디스크립션에 입력한 패스워드를 확인할필요도 없고 따로 엑셀문서로 관리할 필요없이 외부에서도 간단하게 확인이 가능할수 있게된것 같습니다.
댓글 없음:
댓글 쓰기