2021년 2월 26일 금요일

How to check sap po CommunicationChannel password externally

일반적으로 SAP PO의 JDBC Communication Channel에 패스워드 항목에 값을 넣게 되면 '*****' 이렇게 보입니다. 그래서 패스워드를 따로 엑셀에 관리를 하거나 채널 디스크립션에 넣어서 확인이 가능한데요. 하지만 시간이 지나고 유지보수 인력이 바뀌면서 이런 접속정보 관리 문서들은 어느세 사라지고 여러 인력들이 개발을 진행하면서 채널의 디스크립션에 넣었던 패스워드는 사라져 패스워드를 못찾아서 난감했던 경우가 있는데 운이좋아 패스워드를 찾게되면 다행이지만 이렇게 패스워드를 관리하다가는 나중에 문제가 생길수도 있겠다는 생각이 들었습니다.

예를 들어 채널에서 패스워드를 관리한다면 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 툴을 직접 접속해서 채널 디스크립션에 입력한 패스워드를 확인할필요도 없고 따로 엑셀문서로 관리할 필요없이 외부에서도 간단하게 확인이 가능할수 있게된것 같습니다.

댓글 없음:

댓글 쓰기