4

Все статьи, которые я читаю в Интернете, рассказывают о создании самозаверяющего сертификата для домена, которым вы владеете.

У меня дома установлен сервер Apache2 на сервере Ubuntu 16.04. Мой провайдер дает мне динамический IP, поэтому я использую No-IP. На моем маршрутизаторе открыты порты для перенаправления трафика на мой сервер.

Я также получаю доступ к веб-серверу из дома (внутри сети).

Поэтому, если я нахожусь вне моей домашней сети, я буду использовать https://username.noip.me/, а если я дома, я буду использовать https://homeserver/.

Так как же создать самозаверяющий сертификат для этой ситуации? Что я ставлю как общее имя?

4 ответа4

2

Чтобы ответить на ваш актуальный вопрос:

Вам нужно посмотреть на альтернативные имена субъектов.

Это позволяет сертификату назначать более одного доменного имени.

Рекомендуется оставить общее имя пустым и перечислить все полные доменные имена в альтернативном имени субъекта.

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

1

Предложите потратить 10 долларов или меньше на доменное имя и использовать бесплатный сертификат Let's Encrypt . У тебя будет меньше проблем. Вы также можете получить сертификат, используя этот домен noip.me.

Let's Encrypt довольно легко настроить на поддерживаемом дистрибутиве Linux с Apache/Nginx, но вы еще не сказали, какую ОС вы используете. Если вы отредактируете свой пост выше, я могу дать больше рекомендаций.

1

Что я ставлю как общее имя?

Вы используете понятное имя для общего имени (CN) по двум причинам. Во-первых, он отображается для пользователей с помощью инструментов, поэтому вы хотите что-то вроде Example Widgets, LLC. Во-вторых, имена хостов всегда указываются в дополнительном имени субъекта (SAN). Размещение имени хоста в CN не рекомендуется для форумов IETF и CA/B.

Дополнительные правила и причины см. В разделах «Как подписать запрос на подпись сертификата в вашем центре сертификации» и « Как создать самозаверяющий сертификат с помощью openssl»?


Так как же создать самозаверяющий сертификат для этой ситуации?

Используйте утилиту openssl с пользовательским файлом конфигурации. Ниже приведен пример.

Вы должны две вещи. Сначала измените список DNS-имен на username.noip.me и homeserver . Во-вторых, после изменения имен, которые вы хотите указать в сертификате, выполните следующую команду:

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes \
    -keyout example-com.key.pem -days 365 -out example-com.cert.pem

Очевидно, что вы можете изменить имя файла конфигурации с example-com.conf на любое другое .

Кроме того, в доме я управляю своей собственной PKI. У меня есть корневой центр сертификации, который при необходимости выдает сертификаты для устройств в моей сети. На всех устройствах установлен Root CA Мой внутренний домен называется home.pvt . Хосты сети названы, pine64.home.pvt rpi3.home.pvt solaris.home.pvt windows10.home.pvt и т.д. Все работает , как ожидалось.


Пример файла конфигурации

# Self Signed (note the addition of -x509):
#     openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem
# Signing Request (note the lack of -x509):
#     openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem
# Print it:
#     openssl x509 -in example-com.cert.pem -text -noout
#     openssl req -in example-com.req.pem -text -noout

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   Its sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because its presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = test@example.com

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
#  If RSA Key Transport bothers you, then remove keyEncipherment. TLS 1.3 is removing RSA
#  Key Transport in favor of exchanges with Forward Secrecy, like DHE and ECDHE.
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = example.com
DNS.2       = www.example.com
DNS.3       = mail.example.com
DNS.4       = ftp.example.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1
# DNS.9     = fe80::1
1

Вы можете применить трюк и использовать подстановочный сертификат для * .noip.com.

Это требует, чтобы вы использовали «homeserver.noip.com» и указали этот адрес на свой локальный IP-адрес, что можно сделать, добавив запись в файл hosts на компьютерах, на которых вы используете «homeserver.noip.com».

username.noip.com будет по-прежнему разрешаться обычным способом.

Это несколько "грязный подход", но выглядит эффективным для ваших нужд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .