Я работал в лаборатории, настраивая двухуровневую 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
Любое понимание будет оценен.
-спасибо
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.
Мне удалось запустить тестовый промежуточный ЦС. Скорее всего, проблема была в моем файле конфигурации OpenSSL, в частности, в битах CDP и AIA. Но для всех, кто может попытаться достичь чего-то подобного, я опишу, что я сделал, что в итоге сработало.
Вы должны взглянуть на ссылку, предоставленную Crypt32, прежде чем начать, ее можно найти здесь .
Во-первых, для разрешения имен DNS настройте записи A на сервере, на котором запущена служба DNS, которая присоединена к домену, вам потребуются записи как для вспомогательного центра сертификации, так и для сервера IIS. Также убедитесь, что сервер Windows, который будет использоваться в качестве промежуточного ЦС, настроен на использование этого DNS-сервера для разрешения адресов.
mkdir -p ./ca/{certs,private} chmod 700 ./ca/private коснитесь index.txt echo 0001> серийный echo 0001> crlnumber
# # Файл конфигурации 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
openssl ca -config / path / to / config -extensions v3_intermediate_ca -days 1825 -notext -md sha256 -in ca / "Файл CSR" -out ca / certs / subca.cer
openssl ca -gencrl -out rootca.crl.pem -config / путь / к / configи скопируйте сгенерированный сертификат crl и root в виртуальный каталог, который был создан на сервере IIS ранее [121 77] Вернитесь на промежуточный сервер Windows
Ваш промежуточный ЦС Windows должен быть запущен и работать.
Источники
Вы можете попробовать отключить проверку CRL следующим образом:
certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE
Хорошо, теперь уже лучше. Здесь у вас есть ряд проблем:
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).
Я бы рекомендовал откатить все, что вы здесь сделали, и начать с нуля.
Прежде всего, вам необходимо спроектировать ваше решение, спланируйте все аспекты.
В противном случае ваше решение ничего не будет стоить. Даже если это тестовое развертывание, вам все равно придется пройти все эти шаги.
Правильно спланируйте публикацию CRT / CRL и загрузите URL-адреса. Вам нужно будет проверить это дважды, потому что эти проблемы не могут быть легко устранены без повторного развертывания всех сертификатов. Общие предложения по этому поводу:
При планировании расширения CDP / AIA я бы посоветовал проверить мою запись в блоге: Проектирование точек распространения CRL и местоположений доступа к информации о полномочиях . Хотя статья была написана против Microsoft CA, те же принципы применимы к любой другой реализации CA, потому что это лучшие практики.