Skip to content

Replace badssl HTTP certificate tests with loopback servers - #135618

Merged
rzikm merged 2 commits into
mainfrom
rzikm/http-certificate-loopback-tests
Oct 13, 2026
Merged

rzikm merged 2 commits into
mainfrom
rzikm/http-certificate-loopback-tests

Conversation

@rzikm

@rzikm rzikm commented Oct 12, 2026

Copy link
Copy Markdown
Member

HTTP certificate validation tests currently depend on public badssl.com endpoints, making their results sensitive to external availability and certificate configuration. Replace the applicable cases with loopback servers and certificates generated by the existing test helpers.

  • Cover expired, self-signed, and wrong-host certificates with default validation, custom callbacks, and validation-disabled handlers. These cases now run in the inner loop.
  • Use scoped X509ChainPolicy custom trust to isolate SocketsHttpHandler validation errors, and the existing local PKI/revocation responder to exercise both revocation settings without installing trusted roots.
  • Dispose provisional TLS streams when loopback authentication fails, with a regression test for deterministic cleanup.

The two external, no-callback WinHTTP revocation tests are intentionally retained. WinHttpHandler cannot use scoped custom trust, and callback-enabled replacements would test managed chain validation rather than native WinHTTP revocation enforcement.

Validation

Windows x64, using the X: subst path:

  • build.cmd clr+libs -rc release: passed.
  • Focused System.Net.Http certificate classes: 27 passed, none skipped.
  • Focused WinHTTP HTTP/1.1 and HTTP/2 certificate classes on net11.0-windows: 44 passed, none skipped.
  • Shared WinHTTP certificate tests on net481: 11 passed, none skipped.
  • Fourteen certificate/cleanup scenarios passed three consecutive reruns.
  • The cleanup regression failed before the helper fix and passed afterward.

Linux, macOS, mobile, and the retained external WinHTTP revocation cases were not run. No product code or public API changes.

Note

This pull request description was generated by GitHub Copilot.

Generate certificates for expired, self-signed, and hostname-mismatch scenarios and use scoped trust and local revocation checks for SocketsHttpHandler. Preserve the external native WinHTTP revocation cases. Dispose provisional TLS streams after failed authentication and add a cleanup regression test.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 63463cf1-4bfe-42e3-ad96-49f35e245dd1
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines:
Successfully started running 4 pipeline(s).
12 pipeline(s) were filtered out due to trigger conditions.
There may be pipelines that require an authorized user to comment /azp run to run.

…st.AcceptAllCerts.cs

Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
@rzikm
rzikm merged commit f521600 into main Oct 13, 2026
83 of 85 checks passed
@rzikm
rzikm deleted the rzikm/http-certificate-loopback-tests branch October 13, 2026 10:48
@dotnet-milestone-bot dotnet-milestone-bot Bot added this to the 12.0-preview1 milestone Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants