Emacs 31.1의 URL 프록시 로그인: auth-source와 CONNECT 제한
Emacs의 URL 라이브러리에 인증이 필요한 HTTP 프록시를 설정하고, Basic 자격 증명 조회 방식을 이해하며, Emacs 31.1의 HTTPS CONNECT 경로를 고려하세요.
프록시의 주소는 Emacs에 어디로 연결할지 알려 줍니다. 프록시 로그인은 대화의 또 다른 부분입니다. 일반적인 HTTP 요청에서 Emacs의 URL 라이브러리는 프록시 인증 요구에 응답하고, auth-source에서 자격 증명을 얻거나 대화식으로 물어보며, 세션에 보관된 자격 증명을 재사용할 수 있습니다.
아래 설명은 Emacs 31.1을 따릅니다. URL 라이브러리를 사용하는 작업에 관한 것이며, Emacs 패키지가 실행하는 외부 다운로더는 자체 인증 경로를 가집니다.
경로를 정한 뒤 HTTP가 로그인을 요구하도록 두세요
고정된 프록시 엔드포인트는 문서화된 옵션으로 선택할 수 있습니다:
(setq url-proxy-services
'(("http" . "proxy.example:8080")
("https" . "proxy.example:8080")))
자리 표시자를 공급받은 엔드포인트로 바꾸세요. 키는 목적지 URL 스킴을 나타냅니다. HTTPS 항목을 추가하면 HTTPS 목적지의 경로가 선택될 뿐, 그 자체로 자격 증명을 제공하지는 않습니다.
일반적인 HTTP 요청 중에 프록시는 407 Proxy Authentication Required와 Proxy-Authenticate 요구로 응답할 수 있습니다. URL 라이브러리는 지원되는 인증 스킴을 선택하고 프록시 엔드포인트의 자격 증명을 얻습니다. 그다음 Proxy-Authorization로 다시 시도합니다.
Basic 인증에서는 적절한 자격 증명이 없을 때 대화식 요청이 사용자 이름과 암호를 물을 수 있습니다. 비대화식으로 표시된 요청은 그런 질문에 의존할 수 없습니다. 프록시 로그인은 목적지 웹사이트의 로그인과도 별개입니다: 웹사이트의 401 요구는 다른 경로를 따릅니다.
영구 자격 증명을 auth-source에 두세요
auth-source가 이미 ~/.authinfo.gpg 같은 암호화된 자격 증명 파일을 읽는다면, 이 예제의 Basic 항목은 다음과 같은 형태입니다:
machine proxy.example port http login YOUR_LOGIN password YOUR_PASSWORD
실제 계정과 비밀을 사용하고, 파일이 구성된 auth-sources 안에 있는지 확인하세요. 이 줄은 일치하는 필드를 보여 줄 뿐이며, Lisp 초기화 파일에 암호를 넣으라는 지시가 아닙니다.
Emacs 31.1의 Basic 구현에서는 두 가지 세부 사항이 중요합니다. 숫자 TCP 포트 없이 프록시의 호스트 이름을 조회하고, 프록시 URL의 스킴을 auth-source의 포트 값으로 전달합니다. 이 HTTP 프록시의 경우 TCP 연결이 8080 포트를 쓰더라도 그 값은 http입니다.
이 조회에는 인증 요구의 realm이나 숫자 프록시 포트가 포함되지 않습니다. 같은 호스트 이름에서 여러 realm이나 프록시 포트에 대해 서로 다른 Basic 암호를 선택할 것이라고 기대하지 마세요. Digest는 다른 호스트 조회를 사용하므로 위 예제는 Basic 전용입니다.
URL 라이브러리는 자체 인증 캐시도 유지합니다. Basic 항목은 프록시 엔드포인트를 구분하고 엔드포인트 내에서 realm 또는 디렉터리 일치를 사용합니다. 그 캐시는 auth-source 조회와 별개입니다. 프롬프트에서 암호를 입력하면 영구 자격 증명 파일에 새 항목을 저장하지 않고도 세션 캐시를 채울 수 있습니다.
HTTPS에는 더 이른 인증 단계가 있습니다
HTTP 프록시를 통한 HTTPS 목적지의 경우 Emacs는 먼저 CONNECT를 보냅니다. 따라서 웹사이트와의 암호화된 연결에 도달하기 전에 인증이 필요할 수 있습니다.
Emacs 31.1에서 CONNECT 요청 생성기는 인증 기계를 통해 이미 사용 가능한 인증을 확인하며, 캐시된 Basic 자격 증명도 포함합니다. 그 Basic 경로는 그 시점에 새로운 auth-source 항목을 요구하거나 가져오지 않습니다. 200이 아닌 CONNECT 응답도 위에서 설명한 일반 HTTP 407 요구 처리기로 들어가지 않습니다.
결과적으로 일반 HTTP Basic 요구에 응답할 수 있는 auth-source 항목이 새 세션의 첫 HTTPS 요청이 성공적으로 인증된다는 것을 보장하지는 않습니다. 적절한 캐시 자격 증명이 있는 세션은 시작 상태가 다릅니다. 같은 암호 항목을 반복해서 편집하는 것만으로는 두 경로 사이의 이 차이를 없앨 수 없습니다.
HTTPS 작업이 프록시에서 멈춘다면 CONNECT가 407을 받았는지, 이 릴리스의 동작을 쓰고 있는지 확인하세요. 프록시가 제시하는 인증 스킴도 확인하세요. Basic 자격 증명 항목은 모든 기업 인증 시스템을 위한 범용 어댑터가 아닙니다.
지속적인 구성은 공개 프록시 옵션과 선택한 자격 증명 백엔드에 두세요. URL 라이브러리의 내부 Basic 저장소는 이 동작을 이해하는 데 유용하지만, 그 비공개 데이터 구조를 손으로 채우면 설정이 구현 세부 사항에 묶입니다.