У @CryptoGuy был довольно хороший ответ, но я хотел бы остановиться на нем.
Перефразировать:
Вы можете ограничить сторонний ЦС доверенными сертификатами (от этого ЦС), выданными по желаемому списку имен. Даже если сторонний CA не имеет расширения Name Constraints, их можно применить, используя собственный внутренний сервер CA через перекрестную сертификацию. Хитрость заключается в том, что вы подписываете сторонний CA, используя свой внутренний CA.
лист SSL-сертификат -> перекрестный сертификат -> ваш сертификат CA -> ваш внутренний корневой сертификат.
И вот как вы это делаете (используя командную строку OpenSSL CA)
Создать простой CA
openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"
Вы можете пропустить создание промежуточного CA
Создайте промежуточный запрос CA с ограничениями имени.
openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg
С этим в ossl_domain_com.cfg
файле:
[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca
[ req_distinguished_name ]
CN=somedomain.com trust CA
[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com
Затем подпишите этот промежуточный домен CA с вашим CA.
openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg
Если вы пропустили создание промежуточного звена, используйте свой корневой CA для подписи
Теперь заново подпишите ЦС исходного домена под вашим полномочием, используя их сертификат. Вы можете добавить расширения CA здесь.
openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt
Возможно, вам понадобится использовать -x509-to-req
аргумент для создания запроса, который вы подпишете точно так же, как промежуточный пункт выше.
Теперь добавьте ваш корневой CA, промежуточный CA и домен-перекрестный CA в базу данных доверия вашего браузера.