Ну вот и отпуск подошел к концу, жалко конечно, ну да ладно, сейчас поработаем и снова пойдем отдыхать, покуда отдыхал, наткнулся на одной из лент подписки, что можно произвести на 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.