Можно ли ограничить использование корневого сертификата доменом?

Можно ли ограничить использование корневого сертификата доменом?

Мой клиент использует самоподписанный сертификат для работы приложения. Чтобы приложение работало, мне нужно установить корневой сертификат, который они использовали для подписи сертификата.

Можно ли настроить корневой сертификат так, чтобы он действовал только в отношении одного домена?

решение1

Как правило большого пальца:

Нет, доверие к сертификату центра сертификации клиента подразумевает доверие к каждому сертификату, подписанному этим центром сертификации.

Я не знаю ни одного приложения/библиотеки, в которых была бы простая опция, позволяющая вам как конечному пользователю выбрать, будете ли вы доверять своим клиентам или любому другому сертификату CA только для определенных (под)доменов, то есть только для *.example.com и *.example.org и больше ни для чего.

Mozilla испытывает аналогичную озабоченность в отношении пользующихся доверием в настоящее время спонсируемых правительством центров сертификации,открытая точка вниманияи напримерХромимеет встроенные дополнительные проверки для доступа к сайтам Google, благодаря которым мошеннический сертификат *.google.com и взлом центра сертификации Diginotar стали достоянием общественности.

Но даже если вы не доверяете CA, вы все равно можете импортировать/доверять определенному сертификату сервера, подписанному этим CA, что предотвратит предупреждения SSL для имен хостов в этом сертификате. Это должно заставить ваше приложение работать без ошибок или жалоб.

Исключения:

Очень малоиспользуемая опция стандарта X.509v3 PKI — этоОграничения именирасширение, которое позволяет сертификату ЦС содержать белые и черные списки шаблонов доменных имен, для которых он уполномочен выдавать сертификаты.

Вам может повезти, и ваш клиент сдержался, когда настраивал свою инфраструктуру PKI и включил это ограничение имени в свой сертификат CA. Тогда вы можете импортировать его сертификат CA напрямую и знать, что он может проверять только ограниченный диапазон доменных имен.

решение2

@CryptoGuy дал довольно хороший ответ, но я хотел бы его расширить.

Перефразируя:

Вы можете ограничить сторонний CA, чтобы доверять сертификатам (из этого CA), выданным списку имен, который вы хотите. Даже если сторонний 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 с ограничениями имени.

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

Затем подпишите этот промежуточный доменный центр сертификации с помощью вашего центра сертификации.

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 исходного домена под своим руководством, используя его сертификат. Вы можете добавить расширения 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

Вам может потребоваться openssl x509 -x509toreqсоздать запрос, который вы подпишете точно так же, как и промежуточный документ выше.

Теперь добавьте корневой центр сертификации, промежуточный центр сертификации и междоменный центр сертификации в базу данных доверия вашего браузера.

Связанный контент