feat(auth): ad.max_tls_version zum Deckeln der angebotenen TLS-Version
Alte Schannel-Stacks brechen an einem TLS-1.3-ClientHello kommentarlos ab: sie nehmen die TCP-Verbindung an, lesen den ClientHello und setzen zurueck, ohne ein Zertifikat zu schicken. Herunterhandeln hilft dann nicht — TLS 1.3 darf gar nicht erst angeboten werden. max_tls_version (Default 1.3) deckelt die Hoechstversion; die Validierung lehnt eine Hoechstversion unterhalb der Mindestversion ab. check erkennt zusaetzlich zurueckgesetzte Verbindungen und nennt die beiden plausiblen Ursachen: fehlendes LDAPS-Zertifikat auf dem Server oder TLS-1.3-Inkompatibilitaet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBHF4R9EAejDJUMdwr6C68
This commit is contained in:
parent
fd88251e07
commit
11a3ec2e5f
10 changed files with 136 additions and 10 deletions
|
|
@ -262,6 +262,13 @@ func directoryHint(err error) string {
|
|||
return "Der Domain Controller spricht kein TLS 1.2. Für Altsysteme wie " +
|
||||
"Windows Server 2012 R2 lässt sich ad.min_tls_version auf \"1.0\" setzen; " +
|
||||
"besser ist, TLS 1.2 auf dem Domain Controller zu aktivieren."
|
||||
case contains("connection reset by peer", "eof", "broken pipe"):
|
||||
return "Der Domain Controller hat die Verbindung zurückgesetzt, ohne ein " +
|
||||
"Zertifikat zu schicken. Zwei häufige Ursachen: (1) Auf dem Server ist " +
|
||||
"gar kein LDAPS-Zertifikat installiert — Windows nimmt Port 636 dann " +
|
||||
"zwar an, bricht aber ab. (2) Ein alter Schannel-Stack kommt mit dem " +
|
||||
"TLS-1.3-ClientHello nicht zurecht; dann ad.max_tls_version auf \"1.2\" " +
|
||||
"setzen. Prüfen mit: openssl s_client -connect <dc>:636 -tls1_2"
|
||||
case contains("no cipher suite supported by both", "handshake failure"):
|
||||
return "Client und Domain Controller haben keine gemeinsame Cipher-Suite. " +
|
||||
"Zuerst ad.min_tls_version prüfen. Braucht der Domain Controller zwingend " +
|
||||
|
|
|
|||
|
|
@ -153,6 +153,16 @@ func TestDirectoryTLSErrorsGiveActionableHints(t *testing.T) {
|
|||
`LDAPS-Verbindung zu dc01:636: tls: no cipher suite supported by both client and server`,
|
||||
"tlsrsakex",
|
||||
},
|
||||
{
|
||||
"Verbindung zurueckgesetzt",
|
||||
`LDAPS-Verbindung zu dc01:636: read tcp 10.0.0.5->10.0.0.250:636: read: connection reset by peer`,
|
||||
"max_tls_version",
|
||||
},
|
||||
{
|
||||
"Verbindung sofort geschlossen",
|
||||
`LDAPS-Verbindung zu dc01:636: EOF`,
|
||||
"LDAPS-Zertifikat",
|
||||
},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue