
Beispielprogramme in Go, Java, Node, Perl, Python, Ruby, Rust und curl, die testen, ob ein TLS-Truststore Verbindungen zu bekannten bösartigen eMudhra-CA-Websites ablehnt.
https://emudhra.we-have-a-problem.com/
Klar, deine Browser machen das Richtige, aber TLS findet an ein paar mehr Stellen statt als nur im Browser. Du musst also alle Stellen prüfen, an denen sich ein Bundle verstecken könnte. Was für eine Qual!
Eine Lösung habe ich leider nicht für dich. Aber wenn du nur prüfen willst, ob eine bestimmte Sprache von Haus aus das Richtige tut, findest du hier ein paar einfache Beispielprogramme. Jedes davon gibt stillschweigend nichts zurück (weil das der Unix-Weg ist), wenn alles in Ordnung ist, und meldet einen Fehler, wenn es sich mit den bekannten bösartigen Seiten verbinden kann.
Das Tool verwendet den Standardwert des jeweiligen Frameworks/der jeweiligen Sprache, aber du kannst auch ein alternatives Bundle angeben, gegen das geprüft werden soll. Wenn es weiß, wie, zeigt es an, welches Bundle / welchen Pfad es verwendet hat.
$ go run emudhra.go
$ go run emudhra.go /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
exit status 2
$
$ java emudhra.java
Using CA file: /opt/homebrew/Cellar/openjdk/23.0.2/libexec/openjdk.jdk/Contents/Home/lib/security/cacerts
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$ java emudhra.java /etc/ssl/cert.pem
Using CA file: /etc/ssl/cert.pem
$
Erwäge, die Intermediates zu deiner
blocked.certs hinzuzufügen, wie
hier beschrieben.
$ node emudhra.js
$ node emudhra.js /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ perl emudhra.pl
Using SSL_ca_file: /private/etc/ssl/cert.pem
$ perl emudhra.pl /tmp/cert.pem.bad
Using SSL_ca_file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ python3 emudhra.py
Using CA file: /opt/homebrew/etc/openssl@4/cert.pem
$ python3 emudhra.py /tmp/cert.pem.bad
Using CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ ruby emudhra.rb
Using CA file: /usr/lib/ssl/cert.pem
$ ruby emudhra.rb /tmp/cert.pem.bad
Using CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
$ sh emudhra.sh
Used CA file: /etc/ssl/certs/ca-certificates.crt
$ sh emudhra.sh
/tmp/cert.pem.bad
Used CA file: /tmp/cert.pem.bad
BAD: successful connection to https://dv-g3b-aaa-emudhra.we-have-a-problem.com/
BAD: successful connection to https://dv-g3b-emudhra.we-have-a-problem.com/
$
Hinweis: Unter macOS kannst du curl(1) anweisen, das
native Backend zu verwenden, das die Verbindung dann in
allen Fällen ablehnt:
$ CURL_SSL_BACKEND=secure-transport sh emudhra.sh /tmp/cert.pem.bad
Used CA file:
$
$ cd rs
$ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.35s
Running `target/debug/rs`
$ cargo run -- /tmp/cert.pem.bad
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s
Running `target/debug/rs /tmp/cert.pem.bad`
$
Irgendwo in seinen Abhängigkeiten führt Rust eine tatsächliche Blocklist-Prüfung der kompromittierten Intermediates durch, sodass es selbst mit einem Bundle, das eMudhras Root vertraut, keine Verbindung herstellen kann.