Skip to content

Commit f1474c0

Browse files
committed
docs: document the Windows Schannel revocation caveat
1 parent 6b89523 commit f1474c0

2 files changed

Lines changed: 29 additions & 0 deletions

File tree

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,21 @@ with a built-in one overrides it.
186186
Supported `client_hello` templates: `chrome`, `firefox`, `safari`,
187187
`safari-ios`, `edge`, `randomized`.
188188

189+
## Troubleshooting
190+
191+
**curl on Windows fails with a certificate error.** A curl built against
192+
Schannel runs CRL/OCSP revocation checks that a private CA cannot satisfy.
193+
Pass `--ssl-no-revoke`. Clients built on OpenSSL (most Python and CLI
194+
tooling), BoringSSL (Node.js) or Go are unaffected.
195+
196+
**`doppel verify` reports an HTTP/2 fingerprint that is not the profile's.**
197+
Expected: the upstream HTTP/2 layer is not yet fingerprint-controlled. The
198+
TLS (JA3/JA4) fingerprint *is* the profile's. See the [Roadmap](#roadmap).
199+
200+
**A site still blocks the request.** Doppel changes the transport fingerprint
201+
only. If the site serves a JavaScript challenge or scores your egress IP, no
202+
TLS profile will help — see [What it does](#what-it-does--and-does-not--do).
203+
189204
## Architecture
190205

191206
```

internal/wizard/wizard.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ func InstallGuide(certPath, fingerprint, proxyAddr string) string {
2828

2929
fmt.Fprintln(&b, "1. Trust the CA in the OS store")
3030
fmt.Fprintln(&b, osTrustCommand(certPath))
31+
if note := osTrustNote(); note != "" {
32+
fmt.Fprintln(&b, note)
33+
}
3134
fmt.Fprintln(&b)
3235

3336
fmt.Fprintln(&b, "2. Trust the CA in language runtimes (they ignore the OS store)")
@@ -48,6 +51,17 @@ func InstallGuide(certPath, fingerprint, proxyAddr string) string {
4851
return b.String()
4952
}
5053

54+
// osTrustNote returns a platform-specific caveat shown beneath the trust
55+
// command, or an empty string when there is nothing to add.
56+
func osTrustNote() string {
57+
if runtime.GOOS == "windows" {
58+
return " Note: tools using Windows Schannel (curl, .NET) reject a private\n" +
59+
" CA during revocation checks. Disable revocation for them,\n" +
60+
" for example: curl --ssl-no-revoke. OpenSSL-based tools are fine."
61+
}
62+
return ""
63+
}
64+
5165
// osTrustCommand returns the platform-specific command that adds the CA to
5266
// the system trust store.
5367
func osTrustCommand(certPath string) string {

0 commit comments

Comments
 (0)