AES-256-GCM을 찾을 수 없음: 클라이언트 능력인가 협상인가
OpenVPN 오류 두 가지는 비슷해 보인다. 알고리즘이 없는 빌드와 공통 암호가 없는 피어다. 프로필을 고치기 전에 --show-ciphers와 data-ciphers를 읽어라.
다른 곳에서는 동작하는 OpenVPN 프로필이 AES-256-GCM을 찾을 수 없다거나 피어 사이에 공통 암호가 없다고 보고하면, 첫 반응은 프로필을 고치는 것이다. 이 두 메시지는 서로 다른 실패를 말한다. 하나는 로컬 프로그램에 그런 알고리즘이 없다고 하고, 다른 하나는 양쪽에 알고리즘은 있지만 공통된 선택이 없다고 한다. 어느 쪽인지 알기 전에는 프로필 수정으로 둘 다 해결되지 않는다.
정확한 오류 문구와 그것을 낸 실행 파일을 읽어라.
어느 오류인지 판별하기
암호를 찾을 수 없다는 메시지는 패킷을 보내기 전 로컬 기계의 옵션 해석에서 나온다. 앞에 있는 실행 파일이나 그것이 링크한 라이브러리가 그 알고리즘을 제공하지 않는다는 뜻이다. 공통 암호가 없다는 메시지는 더 나중에, 협상 과정에서 도착하며, 양쪽이 암호를 지원하지만 하나에 합의하지 못한다는 뜻이다.
구분이 중요한 이유는 하나는 소프트웨어 버전 문제이고 다른 하나는 설정 문제이기 때문이다. 전자는 버전 번호로 판가름 난다. 후자는 두 목록을 비교해 판가름 난다.
로컬 능력의 공백
오래된 커뮤니티 빌드는 현대 기본값보다 앞선 것이고, 데스크톱 앱은 옆에 설치된 명령줄 패키지와 다른 자체 엔진을 함께 넣을 수 있다. 실제로 연결을 시작한 실행 파일에서 점검하고, 낡은 바이너리에 새 알고리즘을 가르치려 하지 말고 지원되는 빌드를 골라라.
openvpn --version openvpn --show-ciphers | grep -i gcm openvpn --show-tls | head -5
그 목록에 AES-256-GCM이 없다면 어떤 프로필 행도 그것을 더하지 않는다. 해결은 더 새로운 클라이언트나 다른 빌드이며, 낡은 쪽의 제약은 별도의 설계 문제가 된다.
OpenVPN 3 기반 클라이언트에서는 엔진과 허용되는 지시문이 커뮤니티 2.x 계열과 다르므로, 같은 프로필 텍스트가 암호 목록과 무관한 이유로 실패할 수 있다.
협상의 공백
양쪽 피어가 알고리즘을 나열할 때 남는 질문은 어느 쪽이 어떤 목록을 내놓는가이다. 커뮤니티 OpenVPN은 협상 지시문의 이름을 바꿨다. 2.4의 ncp-ciphers는 2.5에서 data-ciphers가 되었고, 2.6에서는 낡은 cipher 행이 주로 호환성과 대체 동작을 맡으며 협상되는 집합을 정의하지는 않는다.
그래서 낡은 cipher 행만 고치면 협상 목록이 그대로 남을 수 있다. 낡은 행은 대체 동작에 여전히 중요하고, 그것은 별개의 작업이다. 둘을 혼동하면 눈에 보이는 것이 아무것도 바뀌지 않는 편집이 된다.
openvpn --version | head -2 grep -n -E '^(data-ciphers|ncp-ciphers|cipher|tls-cipher)' server.conf client.ovpn
양 끝의 목록과 서버의 거부 메시지를 비교하라. 교집합이 비어 있다면 다른 버전을 위해 쓰인 글에서 값을 복사하지 말고 의도적으로 목록을 맞춰라. 지나치게 넓은 목록은 모든 연결을 조용히 약화한다. 지나치게 좁은 목록은 유지하려던 피어를 배제한다.
호환성을 명시적으로 유지하기
낡은 피어 하나를 위한 대체 동작은 비용이 따르는 결정이다. 기기 하나가 접속하도록 전체 배포가 더 약한 선택을 받아들인다. 그렇게 적어 두고, 그것이 필요한 피어로 범위를 좁혀라.
두 조건이 결과를 정한다. 오류가 로컬이라면 빌드를 바꿔라. 오류가 협상이라면 양 끝에서 목록을 맞추고 어떤 버전을 지원하는지 기록하라.
그다음 버전과 능력 출력을 붙여 정확한 오류를 보고하라. 이 짝이 빠진 알고리즘과 불일치를 갈라 주고, 다음 추측성 편집의 차례가 시작되기 전에 멈춘다.