Предупреждение :Перед тем, как погрузиться в минное поле управления собственным центром сертификации, вам может потребоваться изучить последствия для безопасности!
Но если вам нужно, читайте о быстром и грязном ЦС, который выдаст вам https://localhost/
без предупреждающего сообщения...
Создайте следующий текстовый файл:
# OpenSSL configuration for Root CA
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = Test Root CA
[ x509_ext ]
basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
Сохранить как root.cnf
, затем сгенерировать запрос с:
$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf
Это создаст сертификат корневого ЦС(root.cer
)и закрытый ключ корневого ЦС (root.key
), которые вы должны хранить в тайне. Он запросит пароль для закрытого ключа -, убедитесь, что вы выбрали надежный.
Теперь создайте файл конфигурации для сертификата сервера:
# OpenSSL configuration for end-entity cert
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = localhost
[ x509_ext ]
keyUsage=critical,digitalSignature,keyAgreement
subjectAltName = @alt_names
# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com
Сохраните его как server.cnf
и сгенерируйте запрос с:
openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf
Вышеприведенное сгенерирует еще один закрытый ключ (server.key
), который вы должны защитить. В этом случае ключ не защищен паролем, но вы можете добавить пароль, удалив опцию -nodes
.
Наконец, для удобства подпишите запрос своим новым корневым ЦС и расширениями из server.cnf
файла ():
$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext
Примечание. :выберите любое случайное число для опции -set_serial
.
Будет запрошен пароль, который вы ввели при создании корневого ЦС.
Будет создан сертификат сервера (server.cer
).
Теперь добавьте корневой сертификат ЦС(root.cer
)в хранилище привязок доверия -Firefox, чтобы браузер доверял вашему новому ЦС.
Проведите тест, используя OpenSSL в качестве временного -веб-сервера с:
$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www
Примечание :Вы можете получить ошибки, если у вас уже есть сервер, работающий на порту 443. В этом случае либо остановите работающий сервер, либо измените указанный выше номер порта на другой неиспользуемый порт, изменив окончание на (для пример)-accept 8443 -www
При переходе кhttps://localhost
(или https://localhost:8443
, если вы изменили номер порта выше )с помощью Firefox,теперь вы не должны увидеть никаких предупреждений и вам будет представлен список шифров, которые может предложить ваша установка OpenSSL.
Когда вы будете довольны результатами, добавьте server.key
и server.cer
на свой исходный веб-сервер и настройте их соответствующим образом.
После некоторых дискуссий на канале #netfilter
irc выяснилось, что все работает «как задумано». Одна цепочка не может предоставить более широкий доступ (в виде accept
правил ), чем тот, который предоставляется цепочкой сreject
(илиdrop
)правило.
Вердикт accept
действителен только в цепочке, в которой он встречается, и не препятствует продолжению обработки пакетов в цепочках с более высоким приоритетом.
Другими словами, если у вас есть такая цепочка:
table ip filter {
chain INPUT {
type filter hook input priority 0; policy accept;
reject with icmp type host-prohibited
}
}
Невозможно предоставить доступ путем создания дополнительных цепочек. Единственный способ переопределить это правило reject
— добавить дополнительные правила в ту же цепочку .
Это всего лишь предположение.