[첫화면으로]CentOS5에서OpenSSL업그레이드

마지막으로 [b]

한나절 동안 고생해서, 다시 쓸 일이 없도록 기록으로 남겨둠.

이 홈페이지가 있는 가상서버는 CentOS 5가 깔려있었는데(오래 되었다...;;;), 어제 Perl 모듈을 하나 설치하려고 하는데 안 됨

$ cpanm Twitter::API
Searching Twitter::API on cpanmetadb ...
--> Working on Twitter::API
Fetching http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz ... FAIL
! Download http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz failed. Retrying ...
! Download http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz failed. Retrying ...
! Download http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz failed. Retrying ...
! Failed to download http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
! Failed to fetch distribution Twitter-API-1.0003

모듈 소스파일을 다운로드하는 것부터 실패한다.

그래서 wget으로 수동 다운로드 시도하면:

$ /usr/bin/wget http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
--2018-08-06 10:58:18--  http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving search.cpan.org... 151.101.230.217
Connecting to search.cpan.org|151.101.230.217|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz [following]
--2018-08-06 10:58:18--  https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving cpan.metacpan.org... 151.101.230.217, 2a04:4e42:36::729
Connecting to cpan.metacpan.org|151.101.230.217|:443... connected.
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Unable to establish SSL connection.

보아하니 tlsv1 프로토콜이 문제가 되어서 접속이 안 되는 듯하다. 아마 보안상 취약점이 있는데 그동안은 어찌어찌 허용되다가 이제 서버 쪽에서 아예 막았다는 스토리겠거니 짐작함.

curl로 시도해도 마찬가지

$ /usr/bin/curl https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

그러니 wget이 되었든 openssl이 되었든 이걸 업데이트해야 하는데, CentOS5는 이미 지원이 끝났으니 yum update를 해봤자 더 이상 최신 버전이 없다. 그래서 수작업으로 일일이 소스 컴파일 시작.

처음에는 wget을 업그레이드하면 될 줄 알고 시도했는데 wget을 컴파일하려 하면 의존성걸린 gnutls가 필요하고 이걸 깔려고 하면 또 뭐가 필요하고... 간만에 의존성 지옥에 빠져버리게 됨. 처음에는 일일이 찾아가며 설치를 시도했는데 (각 패키지 소스도 wget으로 받을 수 없어서 로컬에서 받아 업데이트하고) 한도 끝도 없어서 난감하다가...

아래 글을 찾음

[How to Enable OpenSSL 1.0.2.a (TLSv1.1 & TLSv1.2) on CentOS 5 & RHEL5]

딱 내 상황이라서, 일단 시키는 대로 해보았다.

먼저 openssl 1.0.2를 설치:

$ mkdir ~/src/
$ cd ~/src/
$ wget https://www.openssl.org/source/openssl-1.0.2a.tar.gz
$ tar -zxvf openssl-*.tar.gz
$ cd openssl-*
$ ./config -fpic shared && make && make install
# 원문에는 ld.so.conf에 직접 기록하고 있지만 디렉토리를 보니 서브디렉토리에 개별 파일로 만들어놓는 분위기길래 마찬가지로 함
$ echo "/usr/local/ssl/lib" >> /etc/ld.so.conf.d/openssl.conf
$ ldconfig

저 페이지에 보면, 기존에 있던 openssl을 덮어쓰지 않기 때문에 거기에 의존하고 있던 프로그램들이 실행되는데 문제가 없다고 하고 있는데, 그게 좋은 건 맞는데 반대로 이후에 설치할 것들은 죄다 새로 설치된 경로인 /usr/local/ssl/을 명시해줘야 해서 귀찮다.

그 다음은 curl 업데이트

$ cd /root/src
$ wget http://curl.haxx.se/download/curl-7.42.1.tar.gz
$ tar -xzvf curl-*.tar.gz
$ cd curl-*
$ ./configure --with-ssl=/usr/local/ssl --disable-ldap && make && make install

본문에 없지만 이제 wget도 업데이트한다.

# wget 패키지 다운받고 압축풀고 그 안에서
# configure할 때 옵션을 다음과 같이
$ ./configure --with-ssl=openssl --with-libssl-prefix=/usr/local/ssl
$ make && make install

이제 문제가 되었던 주소에 접속하면... 또 문제가 있다.

$ wget http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
--2018-08-06 11:14:30--  http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving search.cpan.org... 151.101.230.217
Connecting to search.cpan.org|151.101.230.217|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz [following]
--2018-08-06 11:14:31--  https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving cpan.metacpan.org... 151.101.230.217, 2a04:4e42:36::729
Connecting to cpan.metacpan.org|151.101.230.217|:443... connected.
ERROR: cannot verify cpan.metacpan.org's certificate, issued by ‘CN=GlobalSign CloudSSL CA - SHA256 - G3,O=GlobalSign nv-sa,C=BE’:
  Unable to locally verify the issuer's authority.
To connect to cpan.metacpan.org insecurely, use `--no-check-certificate'.

"인증서를 검증할 수 없다"고 나온다. 나는 예나 지금이나 이 인증서 처리하는 과정은 영 머리가 아프고 잘 모르겠더라. 기존에 /etc/ 아래에 인증서가 있었을 테니 잘 되었던 것일 텐데, 새로 설치한 openssl이 그 파일을 그대로 이용할 수 있게 하려면 어떻게 해야 할까? 누가 알면 좀 가르쳐주세요

(curl은 잘 되고 wget만 투덜대는 이유도 잘 모르겠다)

암튼 잘은 모르겠지만 wget 옵션 중에 CA 인증서를 명시할 수 있길래 /etc 아래에서 찾은 파일을 적어주었다.

$ wget --ca-certificate=/etc/pki/tls/cert.pem http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
--2018-08-06 11:12:09--  http://search.cpan.org/CPAN/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving search.cpan.org... 151.101.230.217
Connecting to search.cpan.org|151.101.230.217|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz [following]
--2018-08-06 11:12:10--  https://cpan.metacpan.org/authors/id/M/MM/MMIMS/Twitter-API-1.0003.tar.gz
Resolving cpan.metacpan.org... 151.101.230.217, 2a04:4e42:36::729
Connecting to cpan.metacpan.org|151.101.230.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53506 (52K) [application/x-gzip]
Saving to: ‘Twitter-API-1.0003.tar.gz’

Twitter-API-1.0003.tar.gz    100%[=================================================>]  52.25K  --.-KB/s    in 0.09s

2018-08-06 11:12:10 (587 KB/s) - ‘Twitter-API-1.0003.tar.gz’ saved [53506/53506]

잘 되길래 그냥 이렇게 살기로... -_-; 그래도 매번 적어주기는 귀찮으니 ~/.wgetrc 파일에 적어준다.

 ca_certificate=/etc/pki/tls/cert.pem

그러면 이제 cpanm도...될 줄 알았는데, 이런 이건 똑같은 증상이 나온다. -v 옵션을 주고 해보면 cpanm은 다운로드받을 때 외부 프로그램을 쓰는 게 아니라 그냥 LWP 모듈을 쓰나보다.

그러면 도대체 무엇부터 손을 대야 하는가 다시 막막해지고 있었는데(설마 펄을 재컴파일...) 다행이 아래 글을 보았고,

[Using perl 5.8.8 with OpenSSL 1.0.1 to connect with TLSv1.2]

Net::SSLeay 또는 Crypt::SSLeay 를 재설치해줘야 된다는 글이 보인다. 그러고보면 어느 서버에서 작업을 해도 꼭 openssl과 이 모듈이 애를 먹였던 것 같기도.

내 서버에는 둘 다 깔려있었는데 일단 Net::SSLeay 부터 재설치시도. 소스를 다운받고 README에 보면 openssl이 별도의 경로에 설치된 경우 그것을 명시하는 법이 적혀 있다.

# https://cpan.metacpan.org/authors/id/M/MI/MIKEM/Net-SSLeay-1.85.tar.gz 다운받아 풀고 그 안에서 작업
$ OPENSSL_PREFIX=/usr/local/ssl/ perl Makefile.PL
$ make && make install

그리고나서 cpanm 을 시도하면 잘 된다. 아마도 LWP를 쓰는 모든 경우에 다 잘 될 거라고 기대...

여담으로, 오늘 보니 아예 CentOS6 에서 openssl과 wget 등만 추가로 받을 수 있도록 저장소를 누가 만들어둔 모양.

git의 github 접속 불가

이 서버에서 git으로 github에 있는 저장소를 복제하려 했더니 no kex alg라는 에러가 나오면서 실패. 검색해보니 이것도 서버에서 사용하는 ssh 알고리즘 버전이 낮아서 github에서 더 이상 지원하지 않는 모양

그래서 일단 git 을 새로 컴파일해보았다.

git-2.19.0]$ ./configure \
  CFLAGS='-I/usr/local/ssl/include' LDFLAGS='-L/usr/local/ssl/lib' \
  --with-openssl=/usr/local/ssl \
  --prefix=/home/gypark/local/
$ make
$ make install

그런데 이렇게 설치한 git 클라이언트로도 똑같은 증상이 나옴. 그래서 혹시 ssh 접속을 할 때 직접 하는 게 아니라 시스템에 있는 외부 ssh 프로그램을 구동하는 건가 싶어서, 이젠 ssh 도 업데이트 -_-

openssh-7.8p1]$ ./configure \
   CFLAGS='-I/usr/local/ssl/include' LDFLAGS='-L/usr/local/ssl/lib' \
   --with-ssl-dir=/usr/local/ssl \
   --prefix=/home/gypark/local/
$ make
$ make install

ssh 버전이 업데이트된 걸 확인하고 git을 다시 실행했더니 이제는 잘 된다. 외부 프로그램을 호출하는 게 맞았던 모양. (git클라이언트는 업데이트하지 않아도 되었던 걸지도 모르겠음)

그런데 ssh 방식으로 clone 하는 건 되는데 https 를 이용하는 건 여전히 프로토콜 문제로 안 됨. 이때는 뭘 사용하는 건지 잘 모르겠다.

이번에는 git 이 github에 접속을 못하네... git을 컴파일할 때 /usr/local/ssl 을 옵션에 추가했는데도...
-- Raymundo 2018-9-21 10:04 am

git no kex alg 관련으로 도움이 많이 되었습니다.
참고로 git은 업데이트 하지 않아도고 openssh update 는 필요합니다.
GIT_EXEC_PATH 환경변수에 신규 ssh 경로만 넣어주면 됩니다.

GIT_EXEC_PATH={openssh bin path}
-- zino 2018-11-20 10:39 pm

아하 그렇군요. 감사합니다~
-- Raymundo 2018-11-28 1:29 pm
이름:  
Homepage:
내용:
 

기타분류

마지막 편집일: 2018-11-28 1:29 pm (변경사항 [d])
11109 hits | Permalink | 변경내역 보기 [h] | 페이지 소스 보기