2010-11-27 1 views
2

Можно ли сгенерировать с помощью сертификата openssl для всех доменов? Мне не нужно подписывать его с CA, ни один CA никогда не сделает это, если это возможно. Мне просто нужно это по определенной причине. Или есть ли способ сделать это?SSL-сертификат для всех доменов

+4

Звучит вполне законно. – Nate 2010-11-27 11:06:11

ответ

-1

Каждый сертификат SSL относится только к одному домену. Если вы используете сертификат для одного домена с другим, пользователи получат предупреждения о том, что происходит фиши. (В дополнение к предупреждению о неподписанном сертификате.)

1

Не совсем. Вы можете самостоятельно подписывать сертификат с * как общее имя. Очевидно, что, как подчеркивает роберт, пользователи получат предупреждения, но на этот раз предупреждение о том, что сертификат подписывается неизвестным эмитентом. Просто позвольте своим пользователям принять его, возможно, через безопасный канал (например, отправьте им сообщение S/MIME или PGP с вашим сертификатом и открытым ключом), и предупреждения также будут отключены.

При работе с ЦС теоретически можно подписать сертификат с целыми полями AltSubnectName в качестве сайтов, которые необходимо разместить на SSL, и это один из немногих способов получить SSL-хостинг.

+2

Если вы используете HTTPS, сертификат с `*` как общее имя будет соответствовать только именам доменов с одним компонентом (например, он будет соответствовать `com`, но не` foo.com`). Правила сопоставления CN подстановочных знаков в HTTPS определены в [RFC2818] (http://www.ietf.org/rfc/rfc2818.txt). – caf 2010-11-29 03:22:57

1

Нет, нет способа создать сертификат, соответствующий всем доменам. И хотя вы можете сгенерировать сертификат, который соответствует нескольким доменам - несколько, а не все - ЦС будет подписывать его только в том случае, если они смогут проверить, что вы контролируете эти домены. Если, конечно, вы не можете обмануть CA.

1

Возможно ли сгенерировать с помощью сертификата openssl для всех доменов?

Это зависит, но в основном, да. Я называю это «Super Cert».

Я могу сказать только «в основном», потому что браузеры отклонят технику ниже. Другие пользовательские агенты, фреймворки, библиотеки и даже операционные системы согласятся с этим.


Суть этого является добавить следующую строку в ваш файл openssl.cnf:

[ x509_ext ] 
... 
subjectAltName   = @alternate_names 
... 

[ alternate_names ] 

DNS.1  = *.com 
DNS.2  = www.*.com 
DNS.3  = *.net 
DNS.4  = www.*.net 
DNS.5  = *.gov 
DNS.6  = www.*.gov 
DNS.7  = *.mil 
DNS.8  = www.*.mil 
... 

Затем вы служите тот же сертификат для каждого запроса.


Причина, по которой она работает: существует две группы, которые публикуют правила, которыми следуют большинство пользовательских агентов. Первый - CA/Browser Forum Baseline Requirements. Второй - IETF с RFC 5280 и RFC 6125. Браузеры следуют за CA/Browser Forum BR. Другие пользовательские агенты, такие как cURL и Wget, и фреймворки, такие как Java, Cocoa и .Net, следуют RFC.

И CA/B, и IETF имеют правила для подстановки подстановочного знака, а это означает, что вам нужно работать над созданием Super Cert. Вы не можете просто использовать *.com и *.*.com для всех случаев.

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


Теперь браузеры отказываются соответствовать имени, как *.com в сертификате. Он кодируется в базовых требованиях, а глобальные домены верхнего уровня (gTLD) перечислены в Public Suffix List (PSL), используемых браузерами.

Агент других пользователей будет с удовольствием соответствовать ему, хотя это и не имеет смысла. Вот пользовательские агенты, библиотеки и фреймворки, которые, похоже, не могут получить соответствующие права. Здесь «право» означает обеспечение посредственного уровня безопасности. Эти пользовательские агенты должны знать, канал находится под атакой, когда они сталкиваются сертификат, который утверждает, что выдается за всю рДВу:

  • Python
  • Рубин
  • Java
  • .Net
  • Какао

Я, кажется, помню, что PERL был единственным, кто получил его частично, отклонив *.com и друзей. Однако он принял www.*.com, если я правильно помню.

Другие пользовательские агенты, которые не смогли отвергнуть бессмысленные имена хостов включают:

  • Wget
  • локон
  • GnuTLS
  • ...

Когда я подал отчеты об ошибках, наиболее цитируемый ответ на его принятие был «... но RFC не запрещает».

Я пытался получить как PKIX working group (Internet's PKI) и DBOUND working group (domain boundaries) отклонить их (или, по крайней мере, советуют принимать их), так как мы знаем, нет единой организации, которая выдает сертификаты для всех .COM, все .NET и т. Д. Также см. Some work that will probably hit dbound sooner rather than later. сказал


Джеймс Полк это:

СА будет только подписать его, если они могут подтвердить, что вы контролируете эти домены. Если, конечно, вы не можете обмануть CA.

Это, в основном, правда. Если вы используете свою собственную PKI, тогда вы создаете Super Cert, подписываете ее со своим внутренним CA, и все будет работать так, как ожидалось, так как Public CA подписал его.

Предполагается, что вы установили внутренний сертификат ЦС, если это необходимо, но это то, что вы делаете, когда запускаете свой собственный ЦС.