Работа с самоподписанными сертификатами в Linux

Оцените статью

Давайте сегодня поговорим о моей любимой ошибке «Подключение не защищено». Если в Internet мы обычно используем Let’s encrypt или приобретенный у хостера сертификат, то в Intranet нам необходимо использовать удостоверяющий центр.

Получение сертификата

Вариант с отсутствующим корневым сертификатом

Например в случае FreeIPA корневой сертификат центра сертификации распространяется на рабочие станции автоматически, но что делать если у нас нет корневого сертификата и мы имеем дело с самоподписанным сертификатом.

Например в этом случае кому выдан и кем выдан это один и тот же сервер.

Например в этом случае кому выдан и кем выдан это один и тот же сервер. И следовательно нам необходимо получить сертификат сервера и поместить его в хранилище доверенных сертификатов.

Мы можем сохранить сертификат на вкладке «Подробнее», кнопка «Экспорт». Это применительно к браузерам от Google, но в принципе для других браузеров подход не отличается.

Экспорт сертификата.

Посмотрим информацию о полученном сертификате.

# openssl x509 -in ./ovirt01-nux.sngp.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4100 (0x1004)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=sngp.com, CN=ovirt01-nux.sngp.com.11650
        Validity
            Not Before: Feb 26 05:05:32 2026 GMT
            Not After : Apr  1 05:05:32 2027 GMT
        Subject: C=US, O=sngp.com, CN=ovirt01-nux.sngp.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d3:9c:59:95:ac:33:5d:b8:cd:f3:03:47:74:03:
                    d7:0e:7c:27:d4:b3:d9:e3:c1:3d:67:74:02:32:9b:
                    a8:f8:12:48:1e:a1:fa:69:a7:4a:d3:f6:1e:14:00:
                    9d:3c:61:e1:bb:8c:ab:1f:20:83:4e:8b:c4:33:6c:
                    84:26:cb:a3:65:cc:e9:61:8c:c2:5a:09:32:63:fc:
                    23:8f:76:10:6a:4a:d8:04:f8:ee:db:79:52:cb:62:
                    cf:34:0b:3a:dc:03:55:eb:c0:c4:13:f1:50:a8:f6:
                    24:69:1b:4e:c5:0e:ac:15:3c:4a:a3:02:27:3b:cc:
                    e7:94:16:5f:2c:60:d1:4e:f6:4f:2c:a3:01:56:f0:
                    70:50:7a:a7:57:cf:09:e3:2c:05:cd:26:e7:e2:b7:
                    b0:4c:87:dc:b0:f5:7d:74:99:52:35:48:c6:47:5b:
                    79:3c:2a:f3:b5:4a:8d:2f:8e:b9:8e:0f:16:d6:92:
                    58:a6:ec:a9:5d:ce:9b:c5:57:d7:4e:44:26:35:66:
                    a4:dd:4e:9f:52:bc:c0:63:ed:eb:a3:04:7a:cb:f0:
                    c2:f0:1b:85:dd:e1:72:2a:99:c1:b5:90:3b:b8:e5:
                    c2:f0:47:86:c2:76:9f:b3:98:a3:2f:41:8c:24:9f:
                    43:80:ef:2b:1a:c2:4a:a6:26:cd:9f:cd:68:5c:79:
                    b0:e9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                4F:5B:8C:91:37:90:4F:F6:15:D7:6E:32:41:42:44:E3:7B:EE:46:B9
            Authority Information Access: 
                CA Issuers - URI:http://ovirt01-nux.sngp.com:80/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA
            X509v3 Authority Key Identifier: 
                keyid:FA:51:B5:35:D5:31:46:EC:17:A3:EA:C6:8A:4C:41:D6:A6:33:0E:AF
                DirName:/C=US/O=sngp.com/CN=ovirt01-nux.sngp.com.11650
                serial:10:00
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Alternative Name: 
                DNS:ovirt01-nux.sngp.com
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        2c:e9:b4:85:27:8c:7b:c9:c9:91:eb:21:a7:9d:80:aa:84:59:
        0f:20:60:73:40:56:c4:e8:b1:6b:ad:ac:6c:ac:48:f3:95:9c:
        fd:68:a8:23:a7:3e:d5:a8:2b:81:ea:bf:6b:60:45:4e:1e:71:
        d0:74:c6:32:05:48:95:34:38:7a:11:24:9d:20:63:f2:2d:8e:
        2f:70:08:15:5c:7d:2e:d0:60:d0:2e:6e:e3:49:1f:72:b3:c3:
        69:fd:e4:d9:89:02:00:38:19:84:8c:f6:0f:fc:de:19:65:e8:
        2f:eb:da:88:1f:6f:04:ce:83:4c:ce:a6:98:02:ae:ed:38:9b:
        c8:57:e9:a8:3e:d4:e1:86:c9:6b:64:d8:b2:4d:4a:74:d6:b2:
        66:d9:f3:0e:4a:bb:f8:6f:e9:81:0d:49:f5:b6:0a:9e:65:34:
        15:ff:e0:78:3e:45:5c:1e:0c:29:82:f8:9f:63:f8:ef:4a:d1:
        7c:85:8e:23:84:bd:35:2e:6c:8b:a4:f9:34:14:61:9d:f8:4e:
        a1:a8:1a:51:06:55:2d:49:0e:f9:7c:5e:67:22:df:cd:29:33:
        77:a8:c6:36:59:8f:83:ec:16:84:59:e4:5f:db:68:88:a0:62:
        82:b6:89:2f:11:f3:59:4c:de:9c:32:23:24:ee:97:45:3f:b7:
        0a:90:ac:9c

Аналогично сертификат мы можем получить и средствами утилиты openssl.

# openssl s_client -connect ovirt01-nux.sngp.com:443 -showcerts </dev/null > test_cert.pem

Запрашивем информацию и сверяем.

# openssl x509 -in ./test_cert.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4100 (0x1004)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=sngp.com, CN=ovirt01-nux.sngp.com.11650
        Validity
            Not Before: Feb 26 05:05:32 2026 GMT
            Not After : Apr  1 05:05:32 2027 GMT
        Subject: C=US, O=sngp.com, CN=ovirt01-nux.sngp.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d3:9c:59:95:ac:33:5d:b8:cd:f3:03:47:74:03:
                    d7:0e:7c:27:d4:b3:d9:e3:c1:3d:67:74:02:32:9b:
                    a8:f8:12:48:1e:a1:fa:69:a7:4a:d3:f6:1e:14:00:
                    9d:3c:61:e1:bb:8c:ab:1f:20:83:4e:8b:c4:33:6c:
                    84:26:cb:a3:65:cc:e9:61:8c:c2:5a:09:32:63:fc:
                    23:8f:76:10:6a:4a:d8:04:f8:ee:db:79:52:cb:62:
                    cf:34:0b:3a:dc:03:55:eb:c0:c4:13:f1:50:a8:f6:
                    24:69:1b:4e:c5:0e:ac:15:3c:4a:a3:02:27:3b:cc:
                    e7:94:16:5f:2c:60:d1:4e:f6:4f:2c:a3:01:56:f0:
                    70:50:7a:a7:57:cf:09:e3:2c:05:cd:26:e7:e2:b7:
                    b0:4c:87:dc:b0:f5:7d:74:99:52:35:48:c6:47:5b:
                    79:3c:2a:f3:b5:4a:8d:2f:8e:b9:8e:0f:16:d6:92:
                    58:a6:ec:a9:5d:ce:9b:c5:57:d7:4e:44:26:35:66:
                    a4:dd:4e:9f:52:bc:c0:63:ed:eb:a3:04:7a:cb:f0:
                    c2:f0:1b:85:dd:e1:72:2a:99:c1:b5:90:3b:b8:e5:
                    c2:f0:47:86:c2:76:9f:b3:98:a3:2f:41:8c:24:9f:
                    43:80:ef:2b:1a:c2:4a:a6:26:cd:9f:cd:68:5c:79:
                    b0:e9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                4F:5B:8C:91:37:90:4F:F6:15:D7:6E:32:41:42:44:E3:7B:EE:46:B9
            Authority Information Access: 
                CA Issuers - URI:http://ovirt01-nux.sngp.com:80/ovirt-engine/services/pki-resource?resource=ca-certificate&format=X509-PEM-CA
            X509v3 Authority Key Identifier: 
                keyid:FA:51:B5:35:D5:31:46:EC:17:A3:EA:C6:8A:4C:41:D6:A6:33:0E:AF
                DirName:/C=US/O=sngp.com/CN=ovirt01-nux.sngp.com.11650
                serial:10:00
            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Alternative Name: 
                DNS:ovirt01-nux.sngp.com
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        2c:e9:b4:85:27:8c:7b:c9:c9:91:eb:21:a7:9d:80:aa:84:59:
        0f:20:60:73:40:56:c4:e8:b1:6b:ad:ac:6c:ac:48:f3:95:9c:
        fd:68:a8:23:a7:3e:d5:a8:2b:81:ea:bf:6b:60:45:4e:1e:71:
        d0:74:c6:32:05:48:95:34:38:7a:11:24:9d:20:63:f2:2d:8e:
        2f:70:08:15:5c:7d:2e:d0:60:d0:2e:6e:e3:49:1f:72:b3:c3:
        69:fd:e4:d9:89:02:00:38:19:84:8c:f6:0f:fc:de:19:65:e8:
        2f:eb:da:88:1f:6f:04:ce:83:4c:ce:a6:98:02:ae:ed:38:9b:
        c8:57:e9:a8:3e:d4:e1:86:c9:6b:64:d8:b2:4d:4a:74:d6:b2:
        66:d9:f3:0e:4a:bb:f8:6f:e9:81:0d:49:f5:b6:0a:9e:65:34:
        15:ff:e0:78:3e:45:5c:1e:0c:29:82:f8:9f:63:f8:ef:4a:d1:
        7c:85:8e:23:84:bd:35:2e:6c:8b:a4:f9:34:14:61:9d:f8:4e:
        a1:a8:1a:51:06:55:2d:49:0e:f9:7c:5e:67:22:df:cd:29:33:
        77:a8:c6:36:59:8f:83:ec:16:84:59:e4:5f:db:68:88:a0:62:
        82:b6:89:2f:11:f3:59:4c:de:9c:32:23:24:ee:97:45:3f:b7:
        0a:90:ac:9c

Все совпадает и openssl можно использовать для более сложных случаев например для Secure LDAP.

Преобразуем в PEM формат подходящий для импорта.

# openssl x509 -in ./test_cert.pem -out ./server_cert.pem -outform PEM

Установка доверенного сертификата

Напрямую в браузер

В Chrome переходим по адресу chrome://certificate-manager/localcerts/usercerts.

Импортируем полученный сертификат как доверенный.

Импортируем полученный сертификат как доверенный.

Импорт сертификата как доверенного.

Проверяем что страница теперь открывается без ошибок.

Проверяем, что страница теперь открывается без ошибок.

Таким образом мы импортировали сертификат на уровне браузера пользователя. Но все же хотелось бы импортировать сертификат чтобы он был доступен на уровне хоста для всех приложений и пользователей.

Для Ubuntu это будет выглядеть следующим образом.

# cp ./ovirt01-nux.sngp.com.pem /usr/local/share/ca-certificates/ovirt01-nux.sngp.com.crt
# update-ca-certificates

Обратите внимание, что сертификат импортируем с расширением .crt и проверим, что сертификат доступен в доверенных.

$ openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt ./ovirt01-nux.sngp.com.pem

Полный список установленных локально сертификатов.

$ awk -v cmd='openssl x509 -noout -subject -enddate 2>/dev/null | tr "\n" " " ; echo' '/BEGIN/{cert=""};{cert=sprintf("%s\n%s",cert,$0)};/END/{print cert |
cmd ;close(cmd)}' /etc/ssl/certs/ca-certificates.crt | sed 's/subject=//' | sort

Так-же, что интересно браузер Chrome как и другие игнорируют сертификаты добавленные в /etc/ssl/certs/ca-certificates.crt и у нас получается два хранилища сертификатов.

  • Для системных приложений — /etc/ssl/certs/ca-certificates.crt
  • Для пользовательских libnss3

Сертификаты пользователя хранятся в двух местах.

  • Центральное общее хранилище — /etc/pki/nssdb
  • Хранилище пользователя — ~/.pki/nssdb

Следовательно нам требуется дополнительно добавлять сертификаты еще и в /etc/pki/nssdb.

Для управления nssdb служит утилита libnss3-tools. Установим утилиту и добавим сертификат в хранилище, но обратите внимание, что в Ubuntu нет хранилища по умолчанию, а только пользовательские и общее хранилище сначала надо создать.

# mkdir -p /etc/pki/nssdb
# certutil -N -d /etc/pki/nssdb
# chmod -R 755 /etc/pki/nssdb

Пароль для системного хранилища не задаем и для добавления сертификата используем команду.

# certutil -d sql:/etc/pki/nssdb -A -t "CT,," -n "CA ovirt01-nux.sngp.com" -i ./ovirt01-nux.sngp.com.pem

Похожие записи

Дополнительные настройки Next Cloud

Продолжаем переезжать на Next Cloud и сегодня мы его донастроим до полноценного использования. Настроим интеграцию с Free IPA, подключим S3 хранилища с Cloud.ru, кэширование и т.п. Настройка кэширования в Next…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Работа с самоподписанными сертификатами в Linux

Работа с самоподписанными сертификатами в Linux

Очередной сертификат

Очередной сертификат

Дополнительные настройки Next Cloud

Дополнительные настройки Next Cloud

Топ-9 нейросетей для генерации изображений в 2026 году

Топ-9 нейросетей для генерации изображений в 2026 году

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose