0. 개요
Windows Server 2019에서 OpenSSH를 통해 SSH / SFTP 서버를 열어두었다. 하지만 구형 SFTP 클라이언트나, 오래된 SFTP 라이브러리를 사용하는 프로그램을 구동하려고 하니 Invalid key exchange algorithm
오류로 인해 사용자 계정인증이 실패하며 서버에 접속이 불가능한 상황이 발생했다. 이를 해결해보자.
1. 로그 분석
OpenSSH의 Operational 로그를 살펴보자.
- EventData process : sshd payload : Unable to negotiate with [IP주소] port [포트번호]: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 [preauth] |
해당 로그를 해석해보면 아래와 같다.
- 클라이언트에서 OpenSSH 서버로 키 인증을 통해 접속 시도
- 클라이언트에서 전송한 키를 OpenSSH에서 받았으나, 클라이언트 ↔ 서버간 일치하는 키 교환 방식이 없음
- 서버 인증 실패로 인하여 클라이언트는 서버에 접속 불가
그래도 로그가 친절하다. 클라이언트가 사용하는 키 인증을 위한 암호화 알고리즘 방식을 알려주기 때문에 문제 해결이 쉽다. 본 로그에서는 클라이언트가 diffie-hellman-group14-sha1
,diffie-hellman-group1-sha1
암호화 알고리즘을 사용한다고 알려주었다.
2. 원인
OpenSSH 8.8 릴리즈 버전 이후부터, 보안 이슈상 SHA-1 해시 알고리즘을 기본적으로 비활성화 해두었기 때문이다.
클라이언트는 SHA-1 암호화 알고리즘을 사용하고, 서버는 SHA-1 암호화 알고리즘 사용이 비활성화 되어있기 때문에 서로 인증이 불가하여 접속이 불가능한 이슈였던 것이다.
3. 해결방법 제안
해결방법은 아래 두가지로 나뉠 수 있다.
- [권장] 클라이언트의 버전 업데이트 (SSH 라이브러리를 사용한 프로그램이라면 SSH 라이브러리 업데이트)
- 서버에서 SHA-1 해시 알고리즘 방식도 사용 가능하도록 설정값 변경
하지만 특정 상황에서는 버전 업데이트가 거의 불가능한 경우도 있다. 필자의 경우에도 클라이언트의 버전 업데이트가 불가능한 상황이라... 서버에서 SHA-1 해시 알고리즘 방식도 사용 가능하도록 설정값을 변경하도록 결정했다.
4. OpenSSH 설정값 변경을 통한 SHA-1 해시 알고리즘 사용 설정
%PROGRAMDATA%\ssh
sshd_config
설정을 위해 상기 경로로 진입한다.
# Ciphers and keying
주석 하단에 아래와 같이 문구를 삽입한다.
KexAlgorithms +diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
해당 내용을 간단하게 설명하자면 아래와 같다.
▣ KexAlgorithms
- Key Exchange Algorithms 의 약자로, 클라이언트 ↔ 서버간 공개키를 주고받는 과정에서 암호화 및 복호화를 위해 대칭키를 생성함. 이 과정에서 사용하는 암호화 알고리즘 방식
암호화 알고리즘 방식 앞에 +
기호를 사용하면, OpenSSH에서 기본적으로 지원하고 있는 KexAlgorithms
에 추가적으로 사용할 암호화 알고리즘 방식을 지정하는 것이다. 웬만해서 +
기호를 넣어 사용하도록 하자.
설정 파일을 저장하고, 해당 설정 파일을 기반으로 OpenSSH가 작동할 수 있도록 sshd
서비스를 재시작 한다.