CentOS 7.4 이상에서 openssl로 암호화한 문장을 복호화할 때 아래와 같은 문제가 발생하는 경우가 있다.
[CentOS6 x64 ~ ]# # echo 'U2FsdGVkX1+68waqZjI25X/iK5UWU8ek7FAfLstQXxZgOksolYMZKmb1mWcjKIoSD/QIq8DmAYFzWWVFi/WcxUs9BZ8+KzritZinp+noiq52l95Ei12xWYNNeZgtIbBs' | openssl aes-256-cbc -md md5 -d -k mykey -base64 error reading input file
- 문제가가 발생하는 openssl 버전을 포함하는 OS 버전들 :
- CentOS 6, CentOS 7.0 ~ 7.3, ubuntu 14.04, 그 외…
이 현상은 낮은 버전의 openssl 에서 발생하는 현상으로 자기 자신이 암호화 한 것도 길이가 길면 복호화에 실패한다.
[root@centos6 ~]# echo 'https://mapoo.net/os/oslinux/openssl-failed-decryption' | openssl aes-256-cbc -md md5 -k mykey -base64 U2FsdGVkX1/Qa9kGxqUoh9Gm3dlgXObIwCZ2f17mGy/KEQI682M9/VU5fOr7OIHF 3aQnKqieIq7BeoF4bjq+U/dQmjvJwYpN2LhSuXpNLQI= [root@centos6 ~]# echo 'U2FsdGVkX1++Tt8IPWx05k5wPxz2lnTs00ezPe0i1AounOx7JzTAq5JiLZ5UpQAHD8jrjkEu3Q/kzswIkwqzFtM1qHGpwzfgPDYf99OAyno=' | openssl aes-256-cbc -md md5 -d -k mykey -base64 error reading input file
openssl-1.0.1 에서 발생되는 버그로 판단된다.
CentOS 7.x의 경우엔 CentOS 7.4에 기본 탑재된 openssl-1.0.2k-8.el7.x86_64 부터 이슈가 해결되었다.
CentOS 7.x의 경우 yum으로 openssl을 업데이트하면 손쉽게 해결 가능하다.
이를 해결하기 위해 높은 버전의 openssl 소스를 이용하여 openssl 바이너리를 빌드하여 해당 바이너리를 이용하여 복호화 해보자.
openssl 바이너리 빌드는 CentOS 6.x x86_64 시스템에서 진행하였다.
1. openssl source download
CentOS 7.4 이상에서 사용되는 openssl 버전 소스 다운로드
[root@centos6 ~]# mkdir /root/openssl [root@centos6 ~]# wget -P /root/openssl https://www.openssl.org/source/openssl-1.0.2e.tar.gz --no-check-certificate
2. 설치 진행
[root@centos6 ~]# cd /root/openssl [root@centos6 openssl]# tar zxvf openssl-1.0.2e.tar.gz [root@centos6 openssl]# cd openssl-1.0.2e [root@centos6 openssl-1.0.2e]# ./config --prefix=/usr/local/etc/openssl-102e [root@centos6 openssl-1.0.2e]# make [root@centos6 openssl-1.0.2e]# make install
※ 참고. 만약 config 시 shared 옵션을 넣게되면 생성된 바이너리를 다른 서버에서 실행 시 아래와 같은 에러가 발생된다.
[root@centos6 openssl-1.0.2e]# ./config --prefix=/usr/local/etc/openssl-102e shared 다른 서버로 openssl 파일을 복사 후 실행 [root@CentOS6-2 ~]# ./openssl ./openssl: symbol lookup error: ./openssl: undefined symbol: d2i_ECPKParameters
따라서 다른 서버에서 해당 바이너리를 사용할거라면 shared 옵션을 빼고 빌드 할 것. 대신 바이너리의 크기가 커진다.
3. 복호화 테스트
[root@centos6 ~]# echo 'U2FsdGVkX1+68waqZjI25X/iK5UWU8ek7FAfLstQXxZgOksolYMZKmb1mWcjKIoSD/QIq8DmAYFzWWVFi/WcxUs9BZ8+KzritZinp+noiq52l95Ei12xWYNNeZgtIbBs' | /usr/local/etc/openssl-102e/bin/openssl aes-256-cbc -e -a -d -k mykey 2> /dev/null https://mapoo.net/os/oswindows/protect-data-by-robocopy-batch-script
/usr/local/etc/openssl-102e/bin/openssl 바이너리 파일을 다른 CentOS 6 / 7, Ubuntu 14.04 x86_64 OS 등에 복사해서 복호화 하는데 사용하면 된다.