Как получить сертификат SNI для внутренних имен хостов?

1070
Dai

У меня дома есть Synology NAS, у которого есть веб-интерфейс, который я открываю для общего доступа в Интернет. Внутри моей локальной сети мое NAS имеет имя хоста, nas.domain.local.а в общедоступном Интернете у меня есть доменное имя, home.notarealdomainname.com.указывающее на мой домашний маршрутизатор (который затем перенаправляет порт 7000 на сервер HTTPS моего NAS на порт 443).

Мой NAS поставляется с самозаверяющим сертификатом, который на самом деле не подходит для этой цели, я хотел бы установить сертификат SNI, который поддерживает оба имени хоста nas.domain.local.в дополнение к home.notarealdomainname.com.- однако все основные CA выполняют некоторую форму проверки домена (как они должны!) но они не могут подтвердить мое .local.доменное имя, поэтому они не будут выдавать этот сертификат.

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

1
Хотя это и не ответ на ваш вопрос, если у вас есть маршрутизатор, который поддерживает [NAT Loopback] (http://en.wikipedia.org/wiki/Network_address_translation#NAT_loopback), вы можете просто забыть локальные доменные имена и всегда использовать общедоступные. с действующим сертификатом. heavyd 9 лет назад 0

3 ответа на вопрос

5
Steffen Ullrich

Public CAs will only issue certificates for public domains. There was a time when they did but abandoned this behavior because this caused problems with newly introduced top-level domains. Also, CA only issue certificates for domains which are only owned and used by a single party, which is not the case for internal names.

Which means: either you accept the self-signed certificate once on all internal devices or you need to roll your own private PKI structure and import the relevant root-CA on all devices.

0
glibdud

I'm assuming the general problem you're trying to solve is how to enable robust HTTPS for the device for both internal and external clients, and you don't actually care if it has two different names. If that's true, you may have another option. If you have control over the DNS server for your internal network, you could have it resolve home.notarealdomainname.com to the internal IP address for internal clients. Then you just need a certificate for the public name, and you can use that name to access it both internally and externally. Here's how I do that in BIND on Ubuntu Server 14.04:

/etc/bind/rc.conf.local:

... zone "home.notarealdomainname.com" in { type master; file "/var/lib/bind/db.home.notarealdomainname.com" } ... 

/var/lib/bind/db.home.notarealdomainname.com:

$ORIGIN . $TTL 86400 home.notarealdomainname.com IN SOA dnsserver.domain.local. myemail.emaildomain.com. ( 1 ; serial 86400 ; refresh (1 day) 3600 ; retry (1 hour) 172800 ; expire (2 days) 3600 ; minimum (1 hour) ) NS dnsserver.domain.local. $ORIGIN home.notarealdomainname.com. @ A 192.168.1.123 

Basically, it's telling your local DNS server (here assumed to be dnsserver.domain.local) that it's the authority for the home.notarealdomainname.com zone (but not notarealdomainname.com, so it won't interfere with other hosts in that domain), and returning the NAS's local IP (here assumed to be 192.168.1.123) for it.

0
jww

Я хотел бы установить сертификат SNI

Там нет такого понятия, как сертификат SNI. Это расширение TLS, и это означает, что имя сервера отправляется в ClientHello.


сертификат, который поддерживает оба имени хоста nas.domain.local. в дополнение к home.notarealdomainname.com.

CA, вероятно, не будет выдавать этот сертификат из-за nas.domain.local.

Но его не ясно мне, где выдача запрещено под CA / Browser (CA / B) Основные требования документов (СА и браузеры делают то, что они согласуют в CA / B форумах, они ничего от IETF не следовать или РЛК).

В связи с этим home.notarealdomainname.comвы будете удовлетворять требованиям раздела 11.1.1 «Авторизация регистрантом доменного имени». Раздел 11.3 запрещает *.local, но это связано с подстановочным знаком (а не локальным именем).

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


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

Вы должны выполнить следующие шаги (даже если вы не совсем хотите это делать):

  1. создать свой собственный CA
  2. создайте CSR со всеми именами, которые вы хотите иметь на сервере
  3. выдать сертификат на основании КСО
  4. подписать сертификат с вашим CA
  5. установите свой CA на свои устройства и машины

Единственное различие между предварительно доверенным списком CA в браузерах и хранилищах сертификатов и вашим CA заключается в том, что вы должны установить свой CA вручную.

Если вам нужно использовать OpenSSL для создания CSR с несколькими дополнительными именами субъекта (например, nas.domain.localи home.notarealdomainname.com), то посмотрите этот вопрос по переполнению стека: сертификат с расширенным использованием ключа работает только в Firefox . В частности, смотрите файл конфигурации OpenSSL .


Наконец, это известная проблема с Интернетом вещей; и в настоящее время не хватает решения. Недавно он был включен в список рассылки по безопасности веб-приложений. См. Предложение: Пометка HTTP как незащищенного :

Я хотел бы предложить рассмотреть четвертую категорию: Персональные
устройства (домашние маршрутизаторы, принтеры, IoT, малиновый pis в классах,
холодильники):
- по своей природе не могут участвовать в системах DNS и CA
- скорее всего, в частном сетевом блоке
- пользователь является владельцем сервиса, следовательно, может доверять себе, а не CA