Суб-ЦС Windows server 2012 не работает, потому что отзыв сертификата был в автономном режиме при использовании сертификата корневого ЦС из корневого ЦС Linux / OpenSSL

Я работал в лаборатории, настраивая двухуровневую PKI с использованием корневого центра сертификации Linux (Debian 9 с OpenSSL) и подчиненного центра сертификации Windows server 2012 R2.

Когда я пытаюсь установить подписанный подчиненный сертификат на сервере Windows, я сначала получаю предупреждение о том, что корневой CA не может быть проверен. Я нажимаю OK, чтобы игнорировать предупреждение, после которого ADCS не запускается.

Корневой сертификат из системы Linux импортируется в каталог Trusted Root Certificate Authority в оснастке Certificate Authority на testpki.

После установки IIS на testpki я создал виртуальный каталог с псевдонимом crld и скопировал корневой сертификат и CRL в этот каталог.

Я могу подключиться к IIS при вводе URL "testpki.example.com/crld", но если я ввожу URL "testpki.example.com/crld/root.cer", я получаю ошибку 404, хотя "root.cer" показан в индексе страницы "../crld".

остальная часть настройки была выполнена в соответствии с этим руководством: Использование openssl в качестве корневого CA для Windows

Любое понимание будет оценен.

-спасибо

certutil -verify -urlfetch .. \ subca. cer Выходные данные

 Issuer:
    CN=example-TESTPKI-CA
  Name Hash(sha1): e6c59398cbed5b994ff33c6e6380312fe2ad9a4a
  Name Hash(md5): b0f8c7beb298a3ba230f71fbc927b386
Subject:
    CN=example-TESTPKI-CA-Xchg
  Name Hash(sha1): 86f6ae3e12a21350005b9d70b1229ecb1b78dd0b
  Name Hash(md5): dd1324e864c4233d2f87e9c0c342dfcd
Cert Serial Number: 4b0000000478b909e350cb7280000000000004

dwFlags = CA_VERIFY_FLAGS_CONSOLE_TRACE (0x20000000)
dwFlags = CA_VERIFY_FLAGS_DUMP_CHAIN (0x40000000)
ChainFlags = CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT (0x40000000)
HCCE_LOCAL_MACHINE
CERT_CHAIN_POLICY_BASE
-------- CERT_CHAIN_CONTEXT --------
ChainContext.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
ChainContext.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
ChainContext.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)

SimpleChain.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
SimpleChain.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
SimpleChain.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)

CertContext[0][0]: dwInfoStatus=102 dwErrorStatus=0
  Issuer: CN=example-TESTPKI-CA
  NotBefore: 2/7/2018 3:37 PM
  NotAfter: 2/14/2018 3:47 PM
  Subject: CN=example-TESTPKI-CA-Xchg
  Serial: 4b0000000478b909e350cb7280000000000004
  Template: CAExchange
  a13e6c1703f95408910d21dc380818b23c76e79f
  Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
  Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
  ----------------  Certificate AIA  ----------------
  Wrong Issuer "Certificate (0)" Time: 0
    [0.0] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
Services,CN=Configuration,DC=example,DC=com?cACertificate?base?objectCla
certificationAuthority

  Revocation Check Failed "Certificate (1)" Time: 0
    [0.1] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
Services,CN=Configuration,DC=example,DC=com?cACertificate?base?objectCla
certificationAuthority

  ----------------  Certificate CDP  ----------------
  Verified "Base CRL (02)" Time: 0
    [0.0] ldap:///CN=example,CN=com,CN=CDP,CN=Public%20Key%
ervices,CN=Services,CN=Configuration,DC=example,DC=com?certificateRevoca
nList?base?objectClass=cRLDistributionPoint

  Verified "Delta CRL (02)" Time: 0
    [0.0.0] ldap:///CN=example-TESTPKI-CA,CN=testpki,CN=CDP,CN=Public%20Ke
0Services,CN=Services,CN=Configuration,DC=example,DC=com?deltaRevocation
t?base?objectClass=cRLDistributionPoint

  ----------------  Base CRL CDP  ----------------
  OK "Delta CRL (02)" Time: 0
    [0.0] ldap:///CN=example-TESTPKI-CA,CN=testpki,CN=CDP,CN=Public%20Key%
ervices,CN=Services,CN=Configuration,DC=example,DC=com?deltaRevocationLi
base?objectClass=cRLDistributionPoint

  ----------------  Certificate OCSP  ----------------
  No URLs "None" Time: 0
  --------------------------------
    CRL 02:
    Issuer: CN=example-TESTPKI-CA
    ThisUpdate: 2/7/2018 3:52 PM
    NextUpdate: 2/15/2018 4:12 AM
    7f6e7f6f4d13cd98164e53d35ce406e2dde3dd3a
    Delta CRL 02:
    Issuer: CN=example-TESTPKI-CA
    ThisUpdate: 2/7/2018 3:52 PM
    NextUpdate: 2/9/2018 4:12 AM
    07de3204292fbc0ab4a42cfef02b6b4837a78529
  Application[0] = 1.3.6.1.4.1.311.21.5 Private Key Archival

CertContext[0][1]: dwInfoStatus=102 dwErrorStatus=1000040
  Issuer: CN=rootca
  NotBefore: 2/7/2018 1:17 PM
  NotAfter: 2/6/2023 1:17 PM
  Subject: CN=example-TESTPKI-CA
  Serial: 1000
  d74fdf7e86c80171e91dd72a16a1f8f72c9666a3
  Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
  Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
  Element.dwErrorStatus = CERT_TRUST_REVOCATION_STATUS_UNKNOWN (0x40)
  Element.dwErrorStatus = CERT_TRUST_IS_OFFLINE_REVOCATION (0x1000000)
  ----------------  Certificate AIA  ----------------
  Failed "AIA" Time: 0
    Error retrieving URL: The request is not supported. 0x80070032 (WIN32: 50
ROR_NOT_SUPPORTED)
    testpki.example.com/crld/root.cer

  ----------------  Certificate CDP  ----------------
  Failed "CDP" Time: 0
    Error retrieving URL: Not found (404). 0x80190194 (-2145844844 HTTP_E_STA
_NOT_FOUND)
    http://testpki.example.com/crld/rootca.crl

  ----------------  Certificate OCSP  ----------------
  No URLs "None" Time: 0
  --------------------------------

CertContext[0][2]: dwInfoStatus=10a dwErrorStatus=0
  Issuer: CN=rootca
  NotBefore: 2/7/2018 12:54 PM
  NotAfter: 2/6/2023 12:54 PM
  Subject: CN=rootca
  Serial: 94cb4df27b1cb5a3
  99a30cec9d5dbc21afe5e4b679e5db844f7a9dd0
  Element.dwInfoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER (0x2)
  Element.dwInfoStatus = CERT_TRUST_IS_SELF_SIGNED (0x8)
  Element.dwInfoStatus = CERT_TRUST_HAS_PREFERRED_ISSUER (0x100)
  ----------------  Certificate AIA  ----------------
  Failed "AIA" Time: 0
    Error retrieving URL: The request is not supported. 0x80070032 (WIN32: 50
ROR_NOT_SUPPORTED)
    testpki.example.com/crld/root.cer

  ----------------  Certificate CDP  ----------------
  Failed "CDP" Time: 0
    Error retrieving URL: Not found (404). 0x80190194 (-2145844844 HTTP_E_STA
_NOT_FOUND)
    http://testpki.example/crld/rootca.crl

  ----------------  Certificate OCSP  ----------------
  No URLs "None" Time: 0
  --------------------------------

Exclude leaf cert:
  a7b797168cbc0ff36636479d8cd2de6f2b184355
Full chain:
  7e1caac607a7a5b087b491accf72df2f8d4cf06e
  Issuer: CN=example-TESTPKI-CA
  NotBefore: 2/7/2018 3:37 PM
  NotAfter: 2/14/2018 3:47 PM
  Subject: CN=example-TESTPKI-CA-Xchg
  Serial: 4b0000000478b909e350cb7280000000000004
  Template: CAExchange
  a13e6c1703f95408910d21dc380818b23c76e79f
The revocation function was unable to check revocation because the revocation
rver was offline. 0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
------------------------------------
Revocation check skipped -- server offline
Leaf certificate revocation check passed
CertUtil: -verify command completed successfully.
3
задан 7 February 2018 в 23:52
3 ответа

Мне удалось запустить тестовый промежуточный ЦС. Скорее всего, проблема была в моем файле конфигурации OpenSSL, в частности, в битах CDP и AIA. Но для всех, кто может попытаться достичь чего-то подобного, я опишу, что я сделал, что в итоге сработало.


Вы должны взглянуть на ссылку, предоставленную Crypt32, прежде чем начать, ее можно найти здесь .


Во-первых, для разрешения имен DNS настройте записи A на сервере, на котором запущена служба DNS, которая присоединена к домену, вам потребуются записи как для вспомогательного центра сертификации, так и для сервера IIS. Также убедитесь, что сервер Windows, который будет использоваться в качестве промежуточного ЦС, настроен на использование этого DNS-сервера для разрешения адресов.



    В корневом ЦС Linux
  • Создайте каталог для хранения вашего ЦС
     mkdir -p ./ca/{certs,private}
    
    chmod 700 ./ca/private
    
    коснитесь index.txt
    
    echo 0001> серийный
    
    echo 0001> crlnumber
     
  • Скопируйте этот файл конфигурации, чтобы внести изменения в каталог ca корневого центра сертификации Linux.
     #
     # Файл конфигурации OpenSSL.
     #
    
     # Создать рабочий каталог.
    
    ROOT_CA_FILENAME = rootca #example ca имя файла
    HTTP_HOST = pki.example.local #example URL для CDP
    
    dir =.
    
    default_ca = CA_Default
    
     [CA_Default]
    серийный = $ dir / serial
    база данных = $ dir / index.txt
    new_certs_dir = $ каталог / сертификаты
    crlnumber = $ dir / crlnumber
    default_crl_days = 213
    default_md = sha256
    сохранить = нет
    email_in_dn = нет
    nameopt = default_ca
    certopt = default_ca
    policy = policy_any
    private_key = $ dir / private / $ ROOT_CA_FILENAME.key.pem
    сертификат = $ dir / certs / $ ROOT_CA_FILENAME.cert.pem
    
     # УСТАНОВИТЬ в скрипте: default_days = 7305
    
    
     [policy_any]
    countryName = необязательно
    stateOrProvinceName = необязательно
    localityName = необязательно
    organizationName = необязательно
    organizationUnitName = необязательно
    commonName = поставляется
    emailAddress = необязательно
    
     [req]
     # Опции для инструмента `req` (` man req`).
    default_bits = 4096
    отличительное_имя = req_distinguished_name
    string_mask = utf8only
    
     # SHA-1 устарел, поэтому используйте вместо него SHA-2.
    default_md = sha256
    
     # Расширение, добавляемое при использовании параметра -x509.
    x509_extensions = v3_ca
    
     [req_distinguished_name]
     # Видеть .
    countryName = Название страны (двухбуквенный код)
    stateOrProvinceName = Название штата или провинции
    localityName = Название населенного пункта
    0.organizationName = Название организации
    organizationUnitName = Название организационной единицы
    commonName = Общее имя
    emailAddress = Адрес электронной почты
    
     # При желании укажите некоторые значения по умолчанию.
    countryName_default =
    stateOrProvinceName_default =
    localityName_default =
    0.organizationName_default =
    organizationUnitName_default =
    emailAddress_default =
    
     [v3_ca]
     # Расширения для типичного CA (`man x509v3_config`).
    subjectKeyIdentifier = хэш
    AuthorityKeyIdentifier = keyid: всегда, эмитент
    basicConstraints = критический, CA: true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
     [v3_intermediate_ca]
     # Расширения для типичного промежуточного CA (`man x509v3_config`).
    subjectKeyIdentifier = хэш
    AuthorityKeyIdentifier = keyid: всегда, эмитент
    basicConstraints = критический, CA: true, pathlen: 0
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    crlDistributionPoints = URI: http: //$HTTP_HOST/crldist/$ROOT_CA_FILENAME.crl
    AuthorityInfoAccess = caIssuers; URI: http: //$HTTP_HOST/crldist/$ROOT_CA_FILENAME.crt
    
     [usr_cert]
     # Расширения для клиентских сертификатов (`man x509v3_config`).
    basicConstraints = CA: FALSE
    nsCertType = клиент, электронная почта
    nsComment = "Сертификат клиента, созданный OpenSSL"
    subjectKeyIdentifier = хэш
    AuthorityKeyIdentifier = keyid, эмитент
    keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth, emailProtection
    
     [server_cert]
     # Расширения для сертификатов сервера (`man x509v3_config`).
    basicConstraints = CA: FALSE
    nsCertType = сервер
    nsComment = "Сертификат сервера, созданный OpenSSL"
    subjectKeyIdentifier = хэш
    AuthorityKeyIdentifier = keyid, эмитент: всегда
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    
     [crl_ext]
     # Расширение для CRL (`man x509v3_config`).
    AuthorityKeyIdentifier = keyid: всегда
    
     [ocsp]
     # Расширение для сертификатов подписи OCSP (`man ocsp`).
    basicConstraints = CA: FALSE
    subjectKeyIdentifier = хэш
    AuthorityKeyIdentifier = keyid, эмитент
    keyUsage = critical, digitalSignature
    extendedKeyUsage = критическое, OCSPSigning
    
     
  • Создать пару ключей
    openssl genrsa -aes256 -out private / rootca.key.pem 4096
    chmod 400 частный / rootca.key.pem
    openssl req -config / путь / к / config \
     -key частный / rootca.key.pem \
     -new -x509 -days 1825 -sha256 -extensions v3_ca \
     -out сертификаты / rootca.cert.pem
    
    Введите парольную фразу для ca.key.pem: secretpassword
    Вас сейчас попросят ввести информацию, которая будет включена
    в ваш запрос на сертификат.
     -----
    Название страны (двухбуквенный код) [XX] :.
    Название штата или провинции [] :.
    Название населенного пункта [] :.
    Название организации []:.
    Название организационной единицы [] :.
    Распространенное имя []:Тестовый корневой центр сертификации
    Адрес электронной почты []:.
    
    chmod 444 сертификатов / rootca.cert.pem
     
  • На сервере Windows под управлением IIS
  • Откройте диспетчер IIS
  • Разверните каталог на левой панели и щелкните правой кнопкой мыши «Сайт по умолчанию». Выберите добавить виртуальный каталог
  • . В диалоговом окне добавления виртуального каталога в разделе «Псевдоним» введите все, что вы использовали для URL-адресов CDP и AIA, в файле конфигурации OpenSSL выше
  • В разделе «Физический путь» введите путь к каталогу. вы собираетесь использовать для регистрации сертификата, нажмите ввод и щелкните ОК
  • . Вернувшись в диспетчер IIS, пока ваш новый виртуальный каталог выбран на левой панели, на средней панели выберите просмотр каталога. На панели сведений справа выберите включить
  • . Не снимая выделения с виртуального каталога на левой панели, выберите редактор конфигурации
  • . В редакторе конфигурации в раскрывающемся меню перейдите к system.webServer \ security \ requestFiltering и установите «Двойное экранирование» на True
  • Применить изменения
  • Возможно, вам придется изменить разрешения виртуального каталога. Кроме того, теперь вы можете импортировать сертификат rootca в каталог доверенного корневого центра сертификации на локальном компьютере сервера IIS в оснастке сертификатов MMC на сервере IIS

  • На сервере Windows, который будет использоваться в качестве промежуточного центра сертификации.
  • Установите Службы сертификации Active Directory через диспетчер серверов (примечание: что этот компьютер должен быть присоединен к домену)
  • Обязательно установите функции управления, выберите ЦС предприятия для службы роли и Подчиненный ЦС для типа ЦС в мастере установки ролей.
  • Для настройки закрытого ключа выберите новый закрытый ключ, оставьте MS-RSA выбранным в раскрывающемся меню, для алгоритма хеширования выберите sha256 и установите длину ключа 4096. Это сгенерирует CSR, который будет скопирован в корневой ЦС Linux
  • Теперь вы можете импортировать сертификат rootca в оснастку сертификатов mmc

  • Снова в ЦС Linux
  • После копирования CSR в каталог корневого ЦС, созданного ранее, выполните:
     openssl ca -config / path / to / config -extensions v3_intermediate_ca -days 1825 -notext -md sha256 -in ca / ​​"Файл CSR" -out ca / ​​certs / subca.cer 
  • Теперь у вас есть подписанный промежуточный сертификат CA в каталоге ca / ​​certs, который можно скопировать в подчиненный CA Windows
  • Перед установкой сертификата subca в ADCS сгенерируйте CRL с помощью следующей команды:
     openssl ca -gencrl -out rootca.crl.pem -config /  путь / к / config 
    и скопируйте сгенерированный сертификат crl и root в виртуальный каталог, который был создан на сервере IIS ранее [121 77] Вернитесь на промежуточный сервер Windows
  • . Убедитесь, что полное доменное имя сервера IIS разрешается из промежуточного центра сертификации. Введите URL-адрес, используемый для CDP, в файле конфигурации выше, если вы использовали примеры CA_FILENAME и HTTP_HOST в файле конфигурации. вы должны ввести http: //pki.example.local/crldist/rootca.crl в адресную строку браузера, и вам будет предложено загрузить или открыть файл crl. Если вы получаете ошибку 404, проверьте права доступа к виртуальному каталогу, используемому для CDP, и если вы получите ошибку 401, проверьте, какие настройки аутентификации установлены для сервера IIS
  • Откройте приложение «Центр сертификации» из диспетчера серверов и вправо щелкните вложенный файл на левой панели, выберите "Импорт"
  • . Найдите расположение файла subca.cer, который вы скопировали из корневого центра сертификации Linux. Нажмите ОК

Ваш промежуточный ЦС Windows должен быть запущен и работать.

Источники

  • Использование OpenSSL в качестве корневого ЦС для Windows
  • Создание точки распространения списка отзыва сертификатов
  • Создание CRL
  • 0
    ответ дан 3 December 2019 в 06:27

    Вы можете попробовать отключить проверку CRL следующим образом:

    https://social.technet.microsoft.com/wiki/contents/articles/964.certificate-revocation- list-crl-verify-an-application-choice.aspx

    certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE
    
    0
    ответ дан 3 December 2019 в 06:27

    Хорошо, теперь уже лучше. Здесь у вас есть ряд проблем:

      Wrong Issuer "Certificate (0)" Time: 0
        [0.0] ldap:///CN=example-TESTPKI-CA,CN=AIA,CN=Public%20Key%20Services,
    Services,CN=Configuration,DC=example,DC=com?cACertificate?base?objectCla
    certificationAuthority
    

    Эта ошибка означает, что в Active Directory опубликован неправильный сертификат subCA. Вам нужно будет повторно опубликовать сертификат subCA в Active Directory, выполнив следующую команду:

    certutil -dspublish -f SubCA.cer SubCA
    

    Теперь ваш корневой CA:

      Failed "AIA" Time: 0
        Error retrieving URL: The request is not supported. 0x80070032 (WIN32: 50
    ROR_NOT_SUPPORTED)
        testpki.example.com/crld/root.cer
    

    вы неправильно ввели URL-адрес в конфигурации OpenSSL. Префикс протокола отсутствует. Вам необходимо добавить префикс http: // и повторно выпустить сертификат SubCA.

      Failed "CDP" Time: 0
        Error retrieving URL: Not found (404). 0x80190194 (-2145844844 HTTP_E_STA
    _NOT_FOUND)
        http://testpki.example.com/crld/rootca.crl
    

    Этот URL кажется правильным (по крайней мере, он включает префикс протокола), сервер CA может получить доступ к веб-серверу, но веб-сервер отвечает 404 , что указывает на то, что на запрошенном пути нет ничего.


    ЧБ, ваша настройка совсем не подходит. У вас слишком много проблем, потому что (как кажется) дизайн не был запланирован или план не был проверен.

    Помимо явных проблем, ваш корневой ЦС сам включает точки распространения списков отзыва сертификатов (CDP) и доступ к информации о полномочиях ( AIA), которые являются избыточными. Вы должны удалить их из корневого сертификата. AIA не используется, чтобы избежать циклов во время построения пути. CDP в корневых сертификатах не используется, потому что вы не можете отозвать корневой (самоподписанный) сертификат из-за проблемы с куриным яйцом. Но они (расширения CDP и AIA) должны быть включены в выпущенный сертификат (т.е. подчиненный CA).

    Я бы рекомендовал откатить все, что вы здесь сделали, и начать с нуля.

    Прежде всего, вам необходимо спроектировать ваше решение, спланируйте все аспекты.

    1. Определите приложения, которые будут использовать сертификаты.
    2. Опишите требования к сертификатам и спланируйте объем сертификатов.
    3. На основе [2] определите шаблоны сертификатов и их конфигурацию, которые вы будете использовать.
    4. Разработайте схему размещения ЦС и создайте диаграмму потока сертификатов (подача сертификата, проверка клиентскими приложениями).
    5. Разработайте план аварийного восстановления, который будет включать план резервного копирования и восстановления.

    В противном случае ваше решение ничего не будет стоить. Даже если это тестовое развертывание, вам все равно придется пройти все эти шаги.

    Правильно спланируйте публикацию CRT / CRL и загрузите URL-адреса. Вам нужно будет проверить это дважды, потому что эти проблемы не могут быть легко устранены без повторного развертывания всех сертификатов. Общие предложения по этому поводу:

    1. не используйте URL-адреса LDAP в CDP / AIA. Рассмотрите возможность использования только HTTP.
    2. используйте выделенный веб-сервер для обслуживания файлов CRT / CRL (не объединяйте SubCA с ролями веб-сервера).
    3. не используйте расширения CDP / AIA в корневом сертификате
    4. убедитесь, что CRT Файлы / CRL доступны для всех клиентов (которые будут использовать ваши сертификаты)

    При планировании расширения CDP / AIA я бы посоветовал проверить мою запись в блоге: Проектирование точек распространения CRL и местоположений доступа к информации о полномочиях . Хотя статья была написана против Microsoft CA, те же принципы применимы к любой другой реализации CA, потому что это лучшие практики.

    3
    ответ дан 3 December 2019 в 06:27

    Теги

    Похожие вопросы