
Примеры программ на Go, Java, Node, Perl, Python, Ruby, Rust и curl, которые проверяют, отклоняет ли хранилище доверенных сертификатов TLS подключения к известным вредоносным сайтам CA eMudhra.
https://emudhra.we-have-a-problem.com/
Конечно, ваши браузеры делают всё правильно, но TLS происходит не только в браузере, а ещё в нескольких других местах. Поэтому нужно проверить все места, где может скрываться пакет. Какая морока!
У меня нет для вас решения, извините. Но если вы хотите просто проверить, правильно ли конкретный язык работает из коробки, вот несколько простых примеров программ. Каждая из них молча ничего не вернёт (потому что так принято в Unix), если всё хорошо, и сообщит об ошибке, если сможет подключиться к известным плохим сайтам.
Инструмент будет использовать то, что задано по умолчанию для данного фреймворка/языка, но вы также можете указать альтернативный пакет для проверки. Если он знает как, он покажет, какой пакет / путь он использовал.
$ 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
$
Рассмотрите возможность добавления промежуточных сертификатов в ваш
blocked.certs, как обсуждается
здесь.
$ 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/
$
Примечание: в macOS вы можете попросить curl(1) использовать
нативный бэкенд, который затем отклоняет соединение во
всех случаях:
$ 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`
$
Где-то в своих зависимостях Rust выполняет фактическую проверку по чёрному списку скомпрометированных промежуточных сертификатов, поэтому даже с пакетом, который доверяет корневому сертификату eMudhra, он не может подключиться.