Ну вот и отпуск подошел к концу, жалко конечно, ну да ладно, сейчас поработаем и снова пойдем отдыхать, покуда отдыхал, наткнулся на одной из лент подписки, что можно произвести на Ubuntu LTS системы, к примеру, здесь и сейчас — это Ubuntu 22.04 LTS Server установка РФ—сертификатов (Сертификаты от Минцифры), т.к. сейчас идет процесс, что у государственных сервисов отзывают сертификаты, выданные GlobalSign и на этот счет все сайты российского сегмента должны использовать свои сертификаты.
На заметку: Russian Trusted Root CA действительно существует и является корневым УЦ Минцифры.
ekzorchik@srv-us2204a:~$ nano rf.sh
#!/bin/bash
(
set -e
cert_tmp="$(mktemp -d)"
trap 'rm -rf "$cert_tmp"' EXIT
curl -fsSL \
https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer \
-o "$cert_tmp/root.crt"
curl -fsSL \
https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer \
-o "$cert_tmp/sub.crt"
openssl x509 -in "$cert_tmp/root.crt" -noout -subject |
grep -Fq "Russian Trusted Root CA"
openssl x509 -in "$cert_tmp/sub.crt" -noout -subject |
grep -Fq "Russian Trusted Sub CA"
root_fingerprint="$(
openssl x509 -in "$cert_tmp/root.crt" -noout -fingerprint -sha1 |
cut -d= -f2 |
tr -d ':'
)"
test "$root_fingerprint" = "8FF915CCAB7BC16F8C5C8099D53E0E115B3AEC2F"
openssl verify \
-CAfile "$cert_tmp/root.crt" \
"$cert_tmp/sub.crt"
install -m 0644 "$cert_tmp/root.crt" \
/usr/local/share/ca-certificates/russian_trusted_root_ca.crt
install -m 0644 "$cert_tmp/sub.crt" \
/usr/local/share/ca-certificates/russian_trusted_sub_ca.crt
update-ca-certificates
curl -fsSvo /dev/null https://business.t-bank-app.ru/
)
ekzorchik@srv-us2204a:~$ chmod +x rf.sh
ekzorchik@srv-us2204a:~$ sudo ./rf.sh
После при проверке доступа, как пример:
ekzorchik@srv-us2204a:~$ curl -fsSvo /dev/null https://business.t-bank-app.ru/
* Trying 178.130.128.29:443...
* Connected to business.t-bank-app.ru (178.130.128.29) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.0 (OUT), TLS header, Certificate Status (22):
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS header, Certificate Status (22):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.2 (IN), TLS header, Finished (20):
{ [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [19 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [5455 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.2 (OUT), TLS header, Finished (20):
} [5 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=*.t-bank-app.ru; O=TBank; C=RU; ST=77 \U0433.\U041C\U043E\U0441\U043A\U0432\U0430; L=\U0433. \U041C\U043E\U0441\U043A\U0432\U0430; street=127287, \U0433. \U041C\U043E\U0441\U043A\U0432\U0430, \U0443\U043B. \U0425\U0443\U0442\U043E\U0440\U0441\U043A\U0430\U044F 2-\U044F, \U0434. 38\U0410, \U0441\U0442\U0440. 26; 1.2.643.100.4=7710140679; OGRN=1027739642281
* start date: Apr 21 12:56:38 2026 GMT
* expire date: Apr 21 12:56:38 2027 GMT
* subjectAltName: host "business.t-bank-app.ru" matched cert's "*.t-bank-app.ru"
* issuer: C=RU; O=The Ministry of Digital Development and Communications; CN=Russian Trusted Sub CA
* SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x55fea75fca40)
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
> GET / HTTP/2
> Host: business.t-bank-app.ru
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [57 bytes data]
* old SSL session ID is stale, removing
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
* TLSv1.2 (OUT), TLS header, Supplemental data (23):
} [5 bytes data]
* TLSv1.2 (IN), TLS header, Supplemental data (23):
{ [5 bytes data]
< HTTP/2 301
< date: Mon, 17 Aug 2026 06:52:59 GMT
< content-type: text/html
< content-length: 166
< location: https://www.tinkoff.ru/business/
< server: MSX Turbo R (R800) Web Server 0.46
< x-powered-by: MSX Basic IB WebApp Delivery Engine
< x-balancer-id: unmatched
< x-ua-compatible: IE=Edge
< content-security-policy: frame-ancestors https://*.tbank-online.com https://*.t-bank-app.ru https://*.tbank.ru https://*.tinkoff.ru
<
{ [166 bytes data]
* Connection #0 to host business.t-bank-app.ru left intact
ekzorchik@srv-us2204a:~$
Если в выводе есть строка: "SSL certificate verify ok" — что в свою очередь означает, что для данного соединения curl успешно проверил TLS-цепочку сертификата относительно доверенных CA, доступных этому экземпляру curl/OpenSSL и по сути недолжно быть ошибки: "cURL: SSL certificate problem: self-signed certificate in certificate chain".
На заметку: И ещё один нюанс с .cer
Актуальная документация T-Bank отдельно предупреждает: .cer может быть, как PEM, так и DER. update-ca-certificates ожидает сертификаты в PEM-формате. Если скачанный файл окажется DER, его нужно преобразовать:
openssl x509 -inform DER -in cert.cer -out cert.crt
Поэтому скрипт из заметки предполагает, что скачанные .cer уже находятся в подходящем формате.
Короче, будем еще наблюдать, но все равно установка сертификатов теперь будет у меня на всех подконтрольных системах.
На этом пока все, с уважением автор блога ekzorchik.