Работа с самоподписанными сертификатами в 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

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

Хранилище артефактов (Docker) Cloud.ru

Продолжаем разбираться с облачной платформой cloud.ru и сегодня займемся хранилищем артефактов. Достоинства хранилища артефактов Docker в Cloud.ru 1. Интеграция с экосистемой Cloud.ru 2. Безопасность 3. Надёжность и доступность 4. Производительность…

Хранение медиа-файлов WordPress в S3-хранилище

В продолжении перевода своих ресурсов в облака следующим этапом необходимо настроить хранение медиа-файлов WordPress в хранилище S3 в облаке Cloud.ru. Задачка довольно типовая, но есть нюансы. Прежде всего зарегистрируем сервисный…

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

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

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

Хранилище артефактов (Docker) Cloud.ru

Хранилище артефактов (Docker) Cloud.ru

Хранение медиа-файлов WordPress в S3-хранилище

Хранение медиа-файлов WordPress в S3-хранилище

Настройка кэширования WordPress при помоши Redis

Настройка кэширования WordPress при помоши Redis

Создание кластера Managed Kubernetes в облаке Cloud.ru

Создание кластера Managed Kubernetes в облаке Cloud.ru

Интеграция FreeIPA DNS и BIND DNS

Интеграция FreeIPA DNS и BIND DNS

Настройка централизованной авторизации в домене IPA на RedOS 8

Настройка централизованной авторизации в домене IPA на RedOS 8