Сгенерированный сертификат SSL не работает в разделе «Личные» > «Сертификаты», только если он также находится в разделе «Доверенные корневые центры сертификации» > «Сертификаты».

Я пытаюсь установить сертификат SSL автоматически с помощью certutil, и я успешно сделал это с помощью следующей команды:

      certutil -addstore -user -f "My" "$CERT_FILE_CERT"

При просмотре сертификатов в certmgr установленный сертификат отображается в разделе «Личные» > «Сертификаты», как и ожидалось. Кажется, моим браузерам (Chrome, Edge) этого недостаточно для проверки сертификата, когда он используется для обслуживания страницы с одного из имен хостов, упомянутых в списке SAN.

Чтобы успешно проверить сертификат и признать его законным, мне также необходимо установить сертификат в доверенные корневые центры сертификации. Есть ли способ изменить файл конфигурации, который я использую с OpenSSL, чтобы требовалась только запись «Личные» > «Сертификаты»? Или мне всегда нужно устанавливать сертификат в двух местах?

В контексте: я стремлюсь максимально упростить процесс настройки локальной среды разработки в моей компании. Мы требуем, чтобы локальные службы обслуживались через HTTPS (одна служба – это служба идентификации, а функция "Вход с помощью Google" не работает, если ваш URL-адрес перенаправления не защищен).

Я использовал OpenSSL со следующей конфигурацией для создания сертификата:

      [req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
C = JP
ST = Shizuoka
L = Hamamatsu
O = COMPANY
OU = Development
CN = localhost

[v3_req]
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 127.0.0.1
DNS.1 = localhost
DNS.2 = host.docker.internal

И следующие команды:

      openssl ecparam -genkey -name prime256v1 | openssl ec -aes256 -out $CERT_FILE_KEY -passout "pass:$CERT_PWD"

openssl req -new -x509 -nodes -days 3650 -key $CERT_FILE_KEY -out $CERT_FILE_CERT -passin "pass:$CERT_PWD" -passout "pass:$CERT_PWD" -config cert-input.conf

openssl pkcs12 -export -out $CERT_FILE_PFX -inkey $CERT_FILE_KEY -in $CERT_FILE_CERT -passin "pass:$CERT_PWD" -passout "pass:$CERT_PWD" -name "Local Dev"

В результате был получен следующий сертификат:

      -----BEGIN CERTIFICATE-----
MIICODCCAd6gAwIBAgIUNrzhFtF68r7gVL5isCrZNUoOzS4wCgYIKoZIzj0EAwIw
cDELMAkGA1UEBhMCSlAxETAPBgNVBAgMCFNoaXp1b2thMRIwEAYDVQQHDAlIYW1h
bWF0c3UxEDAOBgNVBAoMB0NPTVBBTlkxFDASBgNVBAsMC0RldmVsb3BtZW50MRIw
EAYDVQQDDAlsb2NhbGhvc3QwHhcNMjEwODI2MDMyMjMyWhcNMzEwODI0MDMyMjMy
WjBwMQswCQYDVQQGEwJKUDERMA8GA1UECAwIU2hpenVva2ExEjAQBgNVBAcMCUhh
bWFtYXRzdTEQMA4GA1UECgwHQ09NUEFOWTEUMBIGA1UECwwLRGV2ZWxvcG1lbnQx
EjAQBgNVBAMMCWxvY2FsaG9zdDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJRO
TwcPcq2ZI8y6vDqiKaxJ1IGcIsVup1xpBdgGOTpKMQ5IZWyIttFEXjBVytSPJXJx
4NXiryNnWdMEPNdu7JujVjBUMAsGA1UdDwQEAwIF4DATBgNVHSUEDDAKBggrBgEF
BQcDATAwBgNVHREEKTAnhwR/AAABgglsb2NhbGhvc3SCFGhvc3QuZG9ja2VyLmlu
dGVybmFsMAoGCCqGSM49BAMCA0gAMEUCIQDC6qzBjPB8Wj/G7a4x8O8ccX3Gqs5O
W2vwk78A/dDaJAIgdsBlg8kc1MNPuHHXEfp1PvOFAR0DWEilUPJDgbQw6eA=
-----END CERTIFICATE-----

1 ответ

Это работает так, как должно. В хранилище доверенных корневых центров сертификации вы размещаете сертификаты (корневые), которым вы доверяете. Если их там нет, ваша проверяющая сторона не будет знать, что вы решили им доверять.

Личное хранилище — это место , где вы размещаете сертификаты подписчика (также называемые конечными объектами). Это сертификаты, которые службы используют для предоставления проверяющим сторонам. Сертификат вам понадобится только в том случае, если у вас есть приложение Windows, которое является сервером/службой, например IIS.

Поскольку ваша сеть SAN предназначена дляlocalhostтогда вам нужно будет убедиться, что любая служба, запущенная на этом компьютере, имеет доступ к сертификату и закрытому ключу. Если это не собственное приложение Windows или приложение, которое может получить доступ к хранилищу сертификатов Windows, вам необходимо будет настроить сертификат и закрытый ключ для этой службы в соответствии с ее документацией; не размещайте его в личном магазине. Поскольку это работает, когда вы добавляете сертификат в хранилище доверенных корневых центров сертификации , это означает, что вы, возможно, уже это сделали.

Вероятно, вам лучше создать ключ и сертификат CA (basicConstraints = CA) и разместить их в хранилище доверенных корневых центров сертификации . Затем используйте это, чтобы подписать сертификат конечного объекта для использования вашим приложением.

Другие вопросы по тегам