SASL는 연결 지향 프로토콜에서 인증을위한 프레임 워크입니다. 현재,PostgreSQLSASL 인증 메커니즘, SCRAM-SHA-256 및 SCRAM-SHA-256-PLUS를 구현합니다. 앞으로 더 많은 것이 추가 될 수 있습니다.
SASL 인증 메시지 흐름
SASL 인증 교환을 시작하려면 서버는 AuthenticationSASL 메시지를 보냅니다. 서버가 서버가 선호하는 순서로 서버가 수락 할 수있는 SASL 인증 메커니즘 목록이 포함되어 있습니다.
클라이언트는 목록에서 지원되는 메커니즘 중 하나를 선택하고 SaslinItialResponse 메시지를 서버로 보냅니다. 메시지에는 선택한 메커니즘의 이름과 선택한 메커니즘이 사용하는 경우 선택적 초기 클라이언트 응답이 포함됩니다.
하나 이상의 Server-Challenge 및 Client-Response 메시지가 다음과 같습니다. 각 서버 challenge는 authenticationsAlContinue 메시지로 전송되며 SASLRESPONSE 메시지에서 클라이언트의 응답이 이어집니다.
마지막으로, 인증 교환이 성공적으로 완료되면 서버는 AuthenticationSaslfinal 메시지를 보낸 다음 즉시 AuthenticationOk 메시지를 보냅니다. AuthenticationSaslfinal에는 추가 서버-클라이언트 데이터가 포함되어 있으며 컨텐츠는 선택한 인증 메커니즘에만 해당됩니다.
오류가 발생하여 서버는 모든 단계에서 롤 토토을 중단하고 errormessage를 보낼 수 있습니다.
현재 구현 된 SASL 메커니즘은Scram-Sha-256
및 채널 바인딩과의 변형Scram-Sha-256-Plus
. 그들은에 자세히 설명되어 있습니다.RFC 7677및RFC 5802.
Scram-Sha-256이 PostgreSQL에서 사용되면 서버는 클라이언트가 |를 보내는 사용자 이름을 무시합니다.Client-First-Message
. 시작 메시지에서 이미 전송 된 사용자 이름이 대신 사용됩니다.PostgreSQL다중 문자 인코딩을 지원하는 반면 SCRAM은 UTF-8을 사용자 이름으로 사용하도록 지시하므로 UTF-8에서 PostgreSQL 사용자 이름을 나타내는 것은 불가능할 수 있습니다..
SCRAM 사양은 암호가 UTF-8에 있으며로 처리됩니다.SASLPREP알고리즘.PostgreSQL그러나 비밀번호에 UTF-8을 사용하도록 요구하지 않습니다. 사용자의 비밀번호가 설정되면 실제 인코딩에 관계없이 UTF-8 인 것처럼 SASLPREP로 처리됩니다.
채널 바인딩SSL 지원을 통해 PostgreSQL 빌드에서 지원됩니다. 채널 바인딩이있는 SCRAM의 SASL 메커니즘 이름은Scram-Sha-256-Plus
. PostgreSQL에서 사용하는 채널 바인딩 유형은입니다.TLS-Server-End-Point
.
inScram채널 바인딩이 없으면 서버는 전송 된 암호 해시에서 사용자가 제공 한 암호와 혼합되도록 클라이언트에게 전송되는 임의의 숫자를 선택합니다. 이로 인해 암호 해시가 이후 세션에서 성공적으로 재전송하는 것을 방지하지만 실제 서버와 클라이언트 간의 가짜 서버가 서버의 임의 값을 통과하고 성공적으로 인증하는 것을 방지하지는 않습니다..
Scramwith Channel 바인딩은 서버 롤 토토서의 서명을 전송 된 비밀번호 해시에 혼합하여 이러한 중간 공격을 방지합니다. 가짜 서버는 실제 서버의 롤 토토서를 되돌릴 수 있지만 해당 롤 토토서 일치하는 개인 키에 액세스 할 수 없으므로 소유자임을 증명할 수 없으므로 SSL 연결 고장을 유발합니다..
example
서버는 authenticationsAsl 메시지를 보냅니다. 여기에는 서버가 수락 할 수있는 SASL 인증 메커니즘 목록이 포함되어 있습니다.Scram-Sha-256-Plus
및Scram-Sha-256
서버가 SSL 지원으로 구축 된 경우, 그렇지 않으면 후자입니다.
클라이언트는 saslinitialResponse 메시지를 보내서 응답합니다.Scram-Sha-256
또는Scram-Sha-256-Plus
. (클라이언트는 메커니즘 중 하나를 자유롭게 선택할 수 있지만 보안을 개선하려면 채널 바인딩 변형을 지원할 수있는 경우 선택해야합니다.) 초기 클라이언트 응답 필드에 메시지에는 SCRAM이 포함되어 있습니다.Client-First-Message
. 그만큼Client-First-Message
클라이언트가 선택한 채널 바인딩 유형도 포함되어 있습니다.
서버는 Scram과 함께 authenticationsAlcontinue 메시지를 보냅니다Server-First-Message
내용으로.
클라이언트는 scram과 함께 saslresponse 메시지를 보냅니다Client-Final-Message
내용으로.
서버는 scram과 함께 authenticationsaslfinal 메시지를 보냅니다Server-Final-Message
문서에 올바른 것이 없으면 일치하지 않습니다.이 양식문서 문제를보고하려면