SASL는 연결 지향 프로토콜의 인증을 위한 프레임워크입니다. 현재는,포스트그레SQL두 개의 SASL 인증 메커니즘, SCRAM-SHA-256 및 SCRAM-SHA-256-PLUS를 구현합니다. 앞으로는 더 많은 내용이 추가될 수 있습니다. 아래 단계에서는 SASL 인증이 일반적으로 수행되는 방법을 보여주고, 다음 하위 섹션에서는 SCRAM-SHA-256 및 SCRAM-SHA-256-PLUS에 대한 자세한 내용을 제공합니다.
SASL 인증 메시지 흐름
SASL 인증 교환을 시작하기 위해 서버는 AuthenticationSASL 메시지를 보냅니다. 여기에는 서버가 허용할 수 있는 SASL 인증 메커니즘 목록이 서버의 기본 순서대로 포함되어 있습니다.
클라이언트는 목록에서 지원되는 메커니즘 중 하나를 선택하고 SASLInitialResponse 메시지를 서버로 보냅니다. 메시지에는 선택한 메커니즘의 이름과 선택적인 초기 클라이언트 응답(선택한 메커니즘에서 이를 사용하는 경우)이 포함됩니다.
하나 이상의 서버 도전 및 클라이언트 응답 메시지가 이어질 것입니다. 각 서버 챌린지는 AuthenticationSASLContinue 메시지로 전송되고 이어서 SASLResponse 메시지로 클라이언트의 응답이 전송됩니다. 메시지의 세부 사항은 메커니즘에 따라 다릅니다.
마지막으로 인증 교환이 성공적으로 완료되면 서버는 AuthenticationSASLFinal 메시지를 보낸 후 바로 AuthenticationOk 메시지를 보냅니다. AuthenticationSASLFinal에는 선택한 인증 메커니즘에 특정한 콘텐츠를 포함하는 추가 서버-클라이언트 데이터가 포함되어 있습니다. 인증 메커니즘이 완료 시 전송되는 추가 데이터를 사용하지 않는 경우 AuthenticationSASLFinal 메시지가 전송되지 않습니다.
오류가 발생하면 서버는 어느 단계에서나 무지개 토토을 중단하고 ErrorMessage를 보낼 수 있습니다.
현재 구현된 SASL 메커니즘은 다음과 같습니다.SCRAM-SHA-256및 채널 바인딩이 있는 변형SCRAM-SHA-256-PLUS. 자세한 내용은RFC 7677그리고RFC 5802.
SCRAM-SHA-256이 PostgreSQL에서 사용될 때 서버는 클라이언트가 보내는 사용자 이름을 무시합니다.클라이언트 우선 메시지. 시작 메시지에서 이미 전송된 사용자 이름이 대신 사용됩니다.포스트그레SQL여러 문자 인코딩을 지원하는 반면 SCRAM은 사용자 이름으로 utf-8을 사용하도록 지시하므로 PostgreSQL 사용자 이름을 utf-8로 표현하는 것이 불가능할 수 있습니다.
SCRAM 사양에 따르면 비밀번호도 utf-8에 있으며 다음과 같이 처리됩니다.SASLprep알고리즘.포스트그레SQL11445_12043
채널 바인딩은 SSL을 지원하는 PostgreSQL 빌드에서 지원됩니다. 채널 바인딩이 있는 SCRAM의 SASL 메커니즘 이름은 다음과 같습니다.SCRAM-SHA-256-PLUS. PostgreSQL에서 사용하는 채널 바인딩 유형은 다음과 같습니다.tls-서버-엔드포인트.
에스크램채널 바인딩 없이 서버는 전송된 비밀번호 해시에서 사용자가 제공한 비밀번호와 혼합되도록 클라이언트에 전송되는 임의의 숫자를 선택합니다. 이렇게 하면 비밀번호 해시가 이후 세션에서 성공적으로 재전송되는 것을 방지할 수 있지만 실제 서버와 클라이언트 사이의 가짜 서버가 서버의 임의 값을 통과하여 성공적으로 인증하는 것을 방지할 수는 없습니다.
스크램채널 바인딩을 사용하면 서버 인증서의 서명을 전송된 비밀번호 해시에 혼합하여 중간자 공격을 방지할 수 있습니다. 가짜 서버는 실제 서버의 인증서를 재전송할 수 있지만 해당 인증서와 일치하는 개인 키에 액세스할 수 없으므로 자신이 소유자임을 증명할 수 없어 SSL 연결 실패가 발생합니다.
예
서버가 AuthenticationSASL 메시지를 보냅니다. 여기에는 서버가 수락할 수 있는 SASL 인증 메커니즘 목록이 포함됩니다. 이것은 다음과 같습니다SCRAM-SHA-256-PLUS그리고SCRAM-SHA-256서버가 SSL 지원으로 구축된 경우 아니면 후자입니다.
클라이언트는 선택한 메커니즘을 나타내는 SASLInitialResponse 메시지를 보내 응답합니다.SCRAM-SHA-256또는SCRAM-SHA-256-PLUS. (클라이언트는 두 메커니즘 중 하나를 자유롭게 선택할 수 있지만 더 나은 보안을 위해 지원할 수 있는 경우 채널 바인딩 변형을 선택해야 합니다.) 초기 클라이언트 응답 필드의 메시지에는 SCRAM이 포함되어 있습니다.클라이언트 우선 메시지.클라이언트 우선 메시지또한 클라이언트가 선택한 채널 바인딩 유형을 포함합니다.
서버가 SCRAM과 함께 AuthenticationSASLContinue 메시지를 보냅니다.서버 우선 메시지콘텐츠로.
클라이언트가 SCRAM과 함께 SASLResponse 메시지를 보냅니다.클라이언트-최종-메시지콘텐츠로.
서버가 SCRAM과 함께 AuthenticationSASLFinal 메시지를 보냅니다.서버-최종-메시지, 바로 뒤에 AuthenticationOk 메시지가 옵니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.