Я работал над лабораторной настройкой двухуровневой PKI с использованием корневого центра сертификации Linux (Debian 9 с OpenSSL) и подчиненного центра сертификации Windows Server 2012 R2.
Когда я пытаюсь установить подписанный подчиненный сертификат на сервере Windows, я сначала получаю предупреждение о том, что корневой CA не может быть проверен. Я нажимаю OK, чтобы игнорировать предупреждение, после которого ADCS не запускается. Когда я вручную запускаю ADCS, я получаю сообщение об ошибке;
«Функция отзыва не смогла проверить отзыв, потому что сервер отзыва был отключен»
Я считаю, что проблема заключается в том, как я указываю на точку распространения CRL и AIA в корневом ЦС Linux или в том, как я настраиваю IIS на сервере Windows (возможно, оба).
Я настроил пользовательский файл конфигурации OpenSSL на rootca, добавив строки;
authorityInfoAccess = caIssuer;URI:http://testpki.example.com/crld/root.cer crlDistributionPoints = URI:http://testpki.example.com/crld/root.crl
в разделы v3_ca и v3_intermediate_ca конфигурационного файла.
Я установил DNS-запись для "testpki.example.com" для разрешения имен на dc0.
Корневой сертификат из коробки 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.
Хорошо, теперь лучше. Здесь у вас есть ряд проблем:
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
Теперь ваш корневой ЦС:
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, указывая, что на запрошенном пути нет ничего.
TBH, ваша установка совсем не хороша. У вас слишком много проблем, потому что (как кажется) дизайн не был спланирован или план не был проверен.
Помимо явных проблем, ваш корневой ЦС сам включает в себя расширения точек распространения списков отзыва сертификатов (CDP) и доступа к информации о полномочиях (AIA), которые являются избыточными. Вы должны удалить их из корневого сертификата. AIA не используется, чтобы избежать циклов при построении пути. CDP в корневых сертификатах не используется, потому что вы не можете отозвать корневой (самоподписанный) сертификат из-за проблемы с куриным яйцом. Но они (расширения CDP и AIA) должны быть включены в выпущенный сертификат (то есть подчиненный CA).
Я бы рекомендовал откатить все, что вы здесь сделали, и начать с нуля.
Прежде всего, нужно спроектировать свое решение, спланировать все аспекты.
В противном случае ваше решение ничего не будет стоить. Даже если это тестовое развертывание, вам все равно придется пройти все эти шаги.
Правильно спланируйте публикацию CRT / CRL и загрузите URL-адреса. Вам нужно будет проверить это дважды, потому что эти проблемы невозможно легко исправить без повторного развертывания всех сертификатов. Общие предложения по этому поводу:
Что касается планирования расширения CDP / AIA, я бы посоветовал проверить свой пост в блоге: Проектирование точек распространения CRL и мест доступа к информации о полномочиях. Хотя статья написана против Microsoft CA, те же принципы применимы к любой другой реализации CA, потому что это лучшие практики.
Мне удалось запустить тестовый промежуточный ЦС. Скорее всего, проблема была в моем файле конфигурации OpenSSL, в частности, в битах CDP и AIA. Но для всех, кто может пытаться достичь чего-то подобного, я опишу, что я сделал, что в итоге сработало.
Перед запуском вы должны взглянуть на ссылку, предоставленную Crypt32, ее можно найти Вот.
Во-первых, для разрешения имен DNS настройте записи A на сервере, на котором запущена служба DNS, которая присоединена к домену, вам потребуются записи как для вспомогательного центра сертификации, так и для сервера IIS. Также убедитесь, что сервер Windows, который будет использоваться в качестве промежуточного центра сертификации, настроен на использование этого DNS-сервера для разрешения адресов.
mkdir -p ./ca/{certs,private} chmod 700 ./ca/private touch index.txt echo 0001 > serial echo 0001 > crlnumber
# # OpenSSL configuration file. # # Establish working directory. ROOT_CA_FILENAME = rootca #example ca filename HTTP_HOST = pki.example.local #example URL for CDP dir = . default_ca = CA_Default [ CA_Default ] serial = $dir/serial database = $dir/index.txt new_certs_dir = $dir/certs crlnumber = $dir/crlnumber default_crl_days = 213 default_md = sha256 preserve = no email_in_dn = no nameopt = default_ca certopt = default_ca policy = policy_any private_key = $dir/private/$ROOT_CA_FILENAME.key.pem certificate = $dir/certs/$ROOT_CA_FILENAME.cert.pem # SET in script: default_days = 7305 [ policy_any ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] # Options for the `req` tool (`man req`). default_bits = 4096 distinguished_name = req_distinguished_name string_mask = utf8only # SHA-1 is deprecated, so use SHA-2 instead. default_md = sha256 # Extension to add when the -x509 option is used. x509_extensions = v3_ca [ req_distinguished_name ] # See . countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name localityName = Locality Name 0.organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name emailAddress = Email Address # Optionally, specify some defaults. countryName_default = stateOrProvinceName_default = localityName_default = 0.organizationName_default = organizationalUnitName_default = emailAddress_default = [ v3_ca ] # Extensions for a typical CA (`man x509v3_config`). subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_intermediate_ca ] # Extensions for a typical intermediate CA (`man x509v3_config`). subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, 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 ] # Extensions for client certificates (`man x509v3_config`). basicConstraints = CA:FALSE nsCertType = client, email nsComment = "OpenSSL Generated Client Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, emailProtection [ server_cert ] # Extensions for server certificates (`man x509v3_config`). basicConstraints = CA:FALSE nsCertType = server nsComment = "OpenSSL Generated Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth [ crl_ext ] # Extension for CRLs (`man x509v3_config`). authorityKeyIdentifier=keyid:always [ ocsp ] # Extension for OCSP signing certificates (`man ocsp`). basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = critical, OCSPSigning
openssl genrsa -aes256 -out private/rootca.key.pem 4096 chmod 400 private/rootca.key.pem openssl req -config /path/to/config \ -key private/rootca.key.pem \ -new -x509 -days 1825 -sha256 -extensions v3_ca \ -out certs/rootca.cert.pem Enter pass phrase for ca.key.pem: secretpassword You are about to be asked to enter information that will be incorporated into your certificate request. ----- Country Name (2 letter code) [XX]:. State or Province Name []:. Locality Name []:. Organization Name []:. Organizational Unit Name []:. Common Name []:Test Root CA Email Address []:. chmod 444 certs/rootca.cert.pem
openssl ca -config /path/to/config -extensions v3_intermediate_ca -days 1825 -notext -md sha256 -in ca/"CSR File" -out ca/certs/subca.cer
openssl ca -gencrl -out rootca.crl.pem -config /path/to/configи скопируйте сгенерированный сертификат crl и root в виртуальный каталог, который был создан на сервере IIS ранее.
Теперь ваш промежуточный ЦС Windows должен быть запущен.
Источники
Вы можете попробовать отключить проверку CRL следующим образом:
certutil –setreg ca\CRLFlags +CRLF_REVCHECK_IGNORE_OFFLINE