- Введение:
- Почему?
- 2: настройка apache для поддержки ssl
- 1 Подготовка CA
- 2. Создание клиентского закрытого ключа и запроса на сертификат (CSR)
- 3. Подпись запроса на сертификат (CSR) с помощью доверенного сертификата (CA).
- 4. Создание сертификата в формате PKCS#12 для браузера клиента
- 3: настройка брандмауэра
- 3: тестирование настроек
- 4: обновление настроек apache
- 6: постоянный редирект
- Firefox
- New-selfsignedcertificate: командлет powershell для генерации самоподписанного сертификата
- Windows 10 — chrome, ie11 и edge
- Доверие к сертификатам
- Импорт сертификата .pfx
- Использование самоподписанного ssl сертификата sha-256 в iis
- Использование сертификата
- Использованное по
- Источник сертификата (certificate authority)
- Конфиг nginx
- Настройка nginx для использования самоподписанных сертификатов
- Настройка стандартного виртуального хоста apache
- Полезные ссылки
- Предпосылки
- Привязать ssl сертификат к серверу
- Расположение ключа и сертификата
- Сертификат доменного имени
- Создание и установка самоподписанного сертификата
- Создание самоподписанного ssl-сертификата
- Создание самоподписанного ssl-сертификата без запроса
- Создание самоподписанного сертификата
- Создание фрагмента конфигурации с надежными настройками шифрования
- Создать ssl сертификат: пошаговая инструкция
- Создать и самостоятельно подписать сертификат ssl
- Создать самоподписанный сертфикат типа code signing для подписывания кода
- Требования
- Шаг 1. создание конфигурации фрагмента с данными ssl-сертификата.
- Шаг 1. создание собственного самоподписанного доверенного сертификата.
- Шаг 2. создание конфигурации фрагмента для поддержки параметров strong и secure ssl, преодолевающих возможные уязвимости ssl.
- Шаг 3. обновление виртуального хоста домена с помощью приведенных выше настроек фрагмента для включения ssl.
- Заключение
- Вывод
Введение:
Потребовалось мне тут как-то написать небольшой API, в котором необходимо было помимо обычных запросов принимать запросы с «высокой степенью секретности».
Не я первый с этим столкнулся и мир давно уже использует для таких вещей
Поскольку на моём сервере используется nginx, то был установлен модуль SSLГугл не выдал ни одного работоспособного howto, но информация в сети есть по частям.
Итак, пошаговое руководство по настройке nginx на авторизацию клиентов через SSL-сертификаты.
Внимание! В статье для примера используются самоподписанные сертификаты!
Перед стартом создадим папку в конфиге nginx, где будут плоды наших трудов:
cd /path/to/nginx/config/
mkdir ssl && cd sslПочему?
😪Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.
2: настройка apache для поддержки ssl
Итак, на данном этапе файлы ключа и сертификата созданы и хранятся в каталоге /etc/ssl. Теперь нужно отредактировать настройки Apache:
- Создать сниппет конфигураций, указывающий место хранения файлов SSL-сертификата и ключа.
- Настроить виртуальный хост Apache для поддержки сертификата SSL.
- Настроить незашифрованные виртуальные хосты для автоматической переадресации запросов на зашифрованный хост (опционально).
1 Подготовка CA
Создадим конфигnano ca.config
со следующим содержимым:
[ ca ]
default_ca = CA_CLIENT # При подписи сертификатов # использовать секцию CA_CLIENT
[ CA_CLIENT ]
dir = ./db # Каталог для служебных файлов
certs = $dir/certs # Каталог для сертификатов
new_certs_dir = $dir/newcerts # Каталог для новых сертификатов
database = $dir/index.txt # Файл с базой данных подписанных сертификатов
serial = $dir/serial # Файл содержащий серийный номер сертификата (в шестнадцатеричном формате)
certificate = ./ca.crt # Файл сертификата CA
private_key = ./ca.key # Файл закрытого ключа CA
default_days = 365 # Срок действия подписываемого сертификата
default_crl_days = 7 # Срок действия CRL
default_md = md5 # Алгоритм подписи
policy = policy_anything # Название секции с описанием политики в отношении данных сертификата
[ policy_anything ]
countryName = optional # Поля optional - не обязательны, supplied - обязательны
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = optional
emailAddress = optionalДалее надо подготовить структуру каталогов и файлов, соответствующую описанной в конфигурационном файле
2. Создание клиентского закрытого ключа и запроса на сертификат (CSR)
Для создания подписанного клиентского сертификата предварительно необходимо создать запрос на сертификат, для его последующей подписи. Аргументы команды полностью аналогичны аргументам использовавшимся при создании самоподписанного доверенного сертификата, но отсутствует параметр -x509.
3. Подпись запроса на сертификат (CSR) с помощью доверенного сертификата (CA).
При подписи запроса используются параметры заданные в файле ca.config
openssl ca -config ca.config -in client01.csr -out client01.crt -batchВ результате выполнения команды появится файл клиентского сертификата client01.crt.
Для создания следующих сертификатов нужно повторять эти два шага.
4. Создание сертификата в формате PKCS#12 для браузера клиента
Это на тот случай, если к вашему серверу подключаются не бездушные машины, как в моём случае, а живые люди через браузер.
Запароленный файл PKCS#12 надо скормить браузеру, чтобы он смог посещать ваш сайт.
openssl pkcs12 -export -in client01.crt -inkey client01.key -certfile ca.crt -out client01.p12 -passout pass:q1w2e33: настройка брандмауэра
Если вы включили брандмауэр ufw (согласно мануалу по начальной настройке), на данном этапе его нужно настроить для поддержки трафика SSL. К счастью, веб-сервер Nginx регистрирует при установке несколько своих профилей в ufw.
Чтобы просмотреть доступные профили, введите:
3: тестирование настроек
Теперь сайт должен использовать протокол SSL; нужно убедиться, что все работает должным образом, выполнив проверку настроек.
4: обновление настроек apache
Итак, теперь настройки веб-сервера и брандмауэра откорректированы. Можно включить SSL и настроенный для поддержки сертификата виртуальный хост, а затем перезапустить веб-сервер.
Включите модуль Apache для SSL, mod_ssl, и модуль mod_headers, который необходим для работы сниппета SSL:
sudo a2enmod sslsudo a2enmod headers
Включите подготовленный виртуальный хост:
sudo a2ensite default-ssl
Также нужно включить файл ssl-params.conf:
sudo a2enconf ssl-params
Итак, теперь сайт и все необходимые модули включены. Проверьте синтаксис на наличие ошибок:
sudo apache2ctl configtest
Если ошибок нет, команда вернёт:
Syntax OK
Если вы видите такой результат, вы можете перезапустить сервер. Если же в синтаксисе обнаружены ошибки, исправьте их. Затем перезапустите веб-сервер:
sudo systemctl restart apache2
6: постоянный редирект
Если шифрование работает должным образом, настройте постоянный редирект вместо временного.
Откройте файл виртуального хоста Apache:
sudo nano /etc/apache2/sites-available/000-default.conf
Найдите ранее добавленную директиву Redirect и установите значение permanent.
Firefox
Даже после того, как вы установите доверенный источник сертификата в хранилище, Firefox все равно будет выдавать предупреждения. Этого может не случиться в Windows 10, но почти наверняка случится в macOS. Справиться с этим достаточно просто. Firefox демонстрирует вот такой экран:
Чтобы добавить разрешения сертификату, кликните «Дополнительно…». Сразу же после этого кликните на «Принять риск и продолжить», чтобы дать понять, что вы знаете о риске.
Это нужно сделать всего один раз, но для каждого локального домена.
New-selfsignedcertificate: командлет powershell для генерации самоподписанного сертификата
Для создания самоподписанного сертификата в PowerShell нужно использовать командлет New-SelfSignedCertificate, входящий в состав модуля PKI (Public Key Infrastructure).
Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:
Get-Command -Module PKI
Самоподписанные сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.
Для создания сертификата нужно указать значения –DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и —CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат).
Windows 10 — chrome, ie11 и edge
1. Дважды кликните на сертификате (ca.crt).
2. Кликните на кнопку «Установить сертификат».
3. Выберите, хотите ли вы хранить его на уровне пользователя или на уровне машины.
4. Кликните «Дальше».
5. Выберите «Разместить все сертификаты в следующем хранилище».
6. Кликните «Обзор».
7. Выберите «Доверенные корневые источники сертификатов».
8. Кликните «ОК».
9. Кликните «Дальше».
10. Кликните «Завершить».
11. Если появится подсказка, кликните «Да».
Доверие к сертификатам
Чтобы получить обозначение безопасного доступа, ваш новый источник сертификата должен считаться доверенным на вашей машине. Процесс присваивания этого статуса различается в зависимости от операционной системы и удовлетворит большинство браузеров. Если вы используете Firefox, процесс имеет некоторые отличия.
Импорт сертификата .pfx
Аналогично как и с самоподписанным сертификатом (раздел Connections) нажимаем на корень и кликаем на Server Certificates. Далее, справа, нажимаем Import:
Открываем на .pfx файл:
Когда для вас создавали .pfx, на него установили пароль – введите этот пароль в поле ниже и нажмите OK.
Далее, все стандартно – выбираем сайт слева → Bindings → редактируем текущее подключение по 443 порту → выбираем сертификат, который только что сделали в разделе SSL certificate → нажимаем OK.
По окончанию, снова рестартуем IIS:
iisreset /restart
Использование самоподписанного ssl сертификата sha-256 в iis
Обратите внимание, что при создании самоподписанный сертификат для IIS через консоль Internet Information Manager (пункт меню Create Self-Signed Certificate), создается сертификат с исопльзованием алгоритма шифрования SHA-1.
Вы можете привязать самоподписанный сертификат SHA-256, созданный в PowerShell, к сайту IIS. Если вы с помощью PowerShell создали SSL сертификат и поместили его в хранилище сертификатов компьютера, он будет автоматически доступен для сайтов IIS.
Запустите консоль IIS Manager, выберите ваш сайт, затем в настройке Site Binding, выберите созданный вами сертификат и сохраните изменения.
Использование сертификата
Приложениям, обслуживающим ваш контент, понадобится доступ к файлам сертификата и закрытого ключа. Это может быть локальный веб-сервер (Apache или NGINX), локальный сервис или какой-то другой локальный инструмент, допустим, сборщик модулей DevServer.
Вот несколько примеров:
Использованное по
Ubuntu Server 10.10 (Linux 2.6.35-22-server #35-Ubuntu SMP x86_64 GNU/Linux)
nginx 0.9.3
OpenSSL 0.9.8o 01 Jun 2021
Источник сертификата (certificate authority)
1. Создайте закрытый ключ и самоподписанный сертификат
openssl req -x509 -nodes -new -sha512
-days 365 -newkey rsa:4096 -keyout ca.key
-out ca.pem -subj "/C=US/CN=MY-CA"Опционально: если необходимо, можно заменить MY-CA в CN на что-нибудь другое.
Если вам захочется проверить информацию сертификата, его содержимое можно вывести, запустив следующий код:
openssl x509 -in ca.pem -text -noout2. Создайте файл сертификата с расширением .crt:
openssl x509 -outform pem -in ca.pem -out ca.crtКонфиг nginx
listen *:443;
ssl on;
ssl_certificate /path/to/nginx/ssl/server.crt;
ssl_certificate_key /path/to/nginx/ssl/server.nopass.key;
ssl_client_certificate /path/to/nginx/ssl/ca.crt;
ssl_verify_client on;
keepalive_timeout 70;
fastcgi_param SSL_VERIFIED $ssl_client_verify;
fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
fastcgi_param SSL_DN $ssl_client_s_dn;Настройка nginx для использования самоподписанных сертификатов
Прежде чем мы начнем, мы должны убедиться, что веб-сервер Nginx установлен на нашем сервере Ubuntu 18.04.
Если он не установлен, вы можете установить его с помощью этой простой команды:
#apt install nginx
Я установил и включил эту службу на своем сервере.
# nginx -v nginx version: nginx/1.14.0 (Ubuntu) #systemctl enable nginx #systemctl start nginx #systemctl status nginx
Настройка стандартного виртуального хоста apache
Теперь нужно настроить стандартный виртуальный хост Apache (/etc/apache2/sites-available/default-ssl.conf) для поддержки SSL.
Примечание: Если вы используете другой виртуальный хост, укажите его имя вместо /etc/apache2/sites-available/default-ssl.conf.
Прежде чем приступить к настройке, создайте резервную копию файла хоста.
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
Откройте хост в текстовом редакторе:
sudo nano /etc/apache2/sites-available/default-ssl.conf
На данный момент файл виртуального хоста выглядит примерно так (закомментированные строки опущены для удобства):
Полезные ссылки
Надеюсь, был кому-то полезен.
P.S. Этот пост был моей первой публикацией 16 января 2021 года, старая копия удалена (по желанию администрации сайта и потому, что она не была привязана к моему аккаунту).
Предпосылки
Инструментарий openssl необходим для создания самозаверяющего сертификата.
Чтобы проверить, установлен ли пакет openssl в вашей системе Linux, откройте ваш терминал, введите openssl version и нажмите Enter. Если пакет установлен, система распечатает версию OpenSSL, в противном случае вы увидите нечто подобное openssl command not found .
Если пакет openssl не установлен в вашей системе, вы можете установить его, выполнив следующую команду:
Привязать ssl сертификат к серверу
После того, как Вы создали SSL сертификат, следует привязать его к IIS-серверу. Для этого вернитесь в раздел «Сертификаты сервера» и в разделе «Подключения» слева выберите сайт, к которому планируете привязать созданный SSL сертификат.
В столбце «Действия» нажмите на «Привязки…».
В открывшемся диалоговом окне «Добавление привязки сайта» введите сведения о привязке (не забудьте выбрать созданный SSL сертификат в соответствующем поле) и нажмите «ОК».
В открывшемся диалоговом окне «Добавление привязки сайта» введите сведения о привязке (не забудьте выбрать созданный SSL сертификат в соответствующем поле) и нажмите «ОК».
После создания сертификата, описывающего метод шифрования данных, необходимо экспортировать его приватный ключ и задать пароль, чтобы предотвратить выполнение изменений. В результате этих действий будет получен полноценный SSL сертификат, который можно применять для обеспечения защищенных соединений.
Прежде чем создать SSL сертификат, следует проанализировать сферу его применения. Данный метод удобен для организации защиты данных на локальном сервере или во внутренней сети предприятия. Но если к сайту, использующему самоподписанный сертификат, обратится посторонний клиент, ему будет выдано уведомление, что создатель сертификата неизвестен и будет предложено выбрать, доверяет ли пользователь этому сертификату или нет.
Не все готовы доверить свои личные и тем более финансовые данные неизвестному производителю. Поэтому, если Ваш сайт предполагает работу с внешними посетителями, мы рекомендуем приобрести один из SSL сертификатов доверительного центра сертификации, который занимается этим на профессиональной основе.
Использование доверенного SSL сертификата гарантирует безопасность и исключает риски клиента. К сайтам, использующим проверенных поставщиков сертификатов безопасности, клиенты относятся лояльнее, что обеспечивает более эффективное и выгодное сотрудничество.
Расположение ключа и сертификата
Создайте новый сниппет Nginx в каталоге /etc/nginx/snippets.
Рекомендуется указать в названии файла его назначение (к примеру, self-signed.conf):
sudo nano /etc/nginx/snippets/self-signed.conf
В этот файл нужно добавить директиву ssl_certificate, которая будет указывать путь к сертификату, и директиву ssl_certificate_key, которая задаёт путь к соответствующему закрытому ключу.
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Сохраните и закройте файл.
Сертификат доменного имени
В большинстве случаев достаточно зарегистрировать в сертификате вашу рабочую станцию. Тем не менее, если вы предпочитаете собственные доменные имена для локальных приложений, в созданный сертификат можно добавить несколько альтернативных имен.
1. Создайте файл расширения x509 v3:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
# Локальные хостинги
DNS.1 = localhost
DNS.2 = 127.0.0.1
DNS.3 = ::1
# Перечислите доменные имена
DNS.4 = local.dev
DNS.5 = my-app.dev
DNS.6 = local.some-app.dev
EOFСледуя этому шаблону, можно добавить сколько угодно доменных имен.
Примечание: пожалуйста, обновите DNS.4, DNS.5 и DNS.6 или удалите их, если у вас не настроены никакие локальные доменные имена.
2. Создайте закрытый ключ и запрос на подпись сертификата:
openssl req -new -nodes -newkey rsa:4096
-keyout localhost.key -out localhost.csr
-subj "/C=US/ST=State/L=City/O=Some-Organization-Name/CN=localhost"Опционально: страну, штат, город и организацию можно изменять.
3. Создайте самоподписанный сертификат:
openssl x509 -req -sha512 -days 365
-extfile v3.ext
-CA ca.crt -CAkey ca.key -CAcreateserial
-in localhost.csr
-out localhost.crtСоздание и установка самоподписанного сертификата
Открываем IIS Manager. Далее, в меню слева (раздел Connections) нажимаем на корень (как правило это хостнейм вашей машины) и в открывшейся в центральной части рабочей области дважды кликаем левой кнопкой на Server Certificates:
Создание самоподписанного ssl-сертификата
Чтобы создать новый самоподписанный сертификат SSL, используйте openssl req команду:
Давайте разберем команду и разберемся, что означает каждая опция:
-newkey rsa:4096– Создает новый запрос сертификата и 4096-битный ключ RSA. Значение по умолчанию составляет 2048 бит.-x509– Создает сертификат X.509.-sha256– Используйте 265-битный SHA (алгоритм безопасного хэширования).-days 3650– Количество дней для сертификации сертификата. 3650 – это 10 лет. Вы можете использовать любое положительное целое число.-nodes– Создает ключ без ключевой фразы.-out example.crt– Указывает имя файла, в который будет записан вновь созданный сертификат. Вы можете указать любое имя файла.-keyout example.key– Задает имя файла, в который будет записан вновь созданный закрытый ключ. Вы можете указать любое имя файла.
Для получения дополнительной информации о параметрах openssl req команды посетите страницу документации OpenSSL req.
Как только вы нажмете Enter, команда сгенерирует закрытый ключ и задаст вам ряд вопросов, которые она будет использовать для генерации сертификата.
Generating a RSA private key
......................................................................
........
writing new private key to 'example.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Введите запрашиваемую информацию и нажмите Enter.
Создание самоподписанного ssl-сертификата без запроса
Если вы хотите сгенерировать самозаверяющий SSL-сертификат без запроса какого-либо вопроса, используйте -subj параметр и укажите всю информацию о субъекте:
Generating a RSA private key
......................................................................
........
writing new private key to 'example.key'
-----Поля, указанные в
-subj
строке, перечислены ниже:
C=– Название страны. Двухбуквенное сокращение ISO.ST=– Название штата или провинции.L=– Название населенного пункта. Название города, в котором вы находитесь.O=– Полное название вашей организации.OU=– Организационная единица.CN=– Полное доменное имя.
Создание самоподписанного сертификата
SSL состоит в основном из двух частей: один – это закрытый ключ и другой публичный сертификат.
Ключ SSL хранится на сервере ограниченным пользователем root.
Он фактически используется для шифрования содержимого, отправленного клиентам.
Открытый SSL-сертификат предоставляется всем, кто запрашивает контент.
Его можно использовать для дешифрования содержимого, подписанного связанным с ним частным ключом SSL.
Создание фрагмента конфигурации с надежными настройками шифрования
Далее мы создадим еще один фрагмент, который определит некоторые настройки SSL. Это обеспечит Nginx надежным набором шифров SSL и включит некоторые расширенные функции, которые помогут обеспечить безопасность нашего сервера.
Параметры, которые мы установим, могут быть повторно использованы в будущих конфигурациях Nginx, поэтому мы дадим файлу общее имя:
Для безопасной настройки Nginx SSL мы будем использовать рекомендации Реми ван Элста на сайтеCipherli.st. Этот сайт предназначен для предоставления простых в использовании настроек шифрования для популярного программного обеспечения.
[.Примечание]##
Предлагаемые настройки на сайте, на который есть ссылки, обеспечивают высокую безопасность. Иногда это происходит за счет большей совместимости клиента. Если вам требуется поддержка старых клиентов, есть альтернативный список, доступ к которому можно получить, щелкнув ссылку на странице с надписью «Да, дайте мне набор шифров, который работает с устаревшим / старым программным обеспечением». Этот список можно заменить скопированными элементами. ниже.
Выбор используемого вами конфига будет во многом зависеть от того, что вам нужно поддерживать. Они оба обеспечат большую безопасность.
Для наших целей мы можем скопировать предоставленные настройки в полном объеме. Нам просто нужно сделать несколько небольших модификаций.
Во-первых, мы добавим наш предпочтительный преобразователь DNS для исходящих запросов. Мы будем использовать Google для этого руководства.
Создать ssl сертификат: пошаговая инструкция
Самостоятельно создать SSL сертификат можно, выполнив 4 простых шага:
- В Панели управления войдите в раздел «Администрирование» и выберите там пункт «Диспетчер служб IIS».

- В Диспетчере служб нужно перейти в раздел «Сертификаты сервера».

- Справа расположен столбец «Действия». В нем выберите пункт «Создать самозаверенный сертификат…»

- В открывшемся диалоговом окне понадобится ввести название сертификата.

Создать и самостоятельно подписать сертификат ssl
Для этого мы будем использовать openssl утилита. Скорее всего, это уже установлено, так как это зависимость от Nginx. Но если чего-то не хватает, вы можете установить его из диспетчера пакетов вашего дистрибутива. Для систем на основе Debian, таких как Ubuntu, это будет:
sudo apt-get install openssl
После openssl установлен, вы можете создать сертификат с помощью следующей команды:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx.key -out /etc/ssl/certs/nginx.crt
Вас попросят предоставить некоторую информацию о вашей организации. Поскольку он самоподписан, единственное, что действительно имеет значение, это «Общее имя», в котором должно быть указано ваше доменное имя или IP-адрес вашего сервера.
Country Name (2 letter code) []: State or Province Name (full name) []: Locality Name (eg, city) []: Organization Name (eg, company) []: Organizational Unit Name (eg, section) []: Common Name (eg, fully qualified host name) []: your_ip_address Email Address []:
Это займет секунду, чтобы сгенерировать новый закрытый ключ RSA, используемый для подписи сертификата, и сохранить его в /etc/ssl/private/nginx.key, Сам сертификат хранится в /etc/ssl/certs/nginx.crtи действует в течение всего года.
Мы также хотим создать группу Диффи-Хеллмана. Это используется для совершенной прямой секретности, которая генерирует эфемерные сеансовые ключи, чтобы гарантировать, что прошлые соединения не могут быть расшифрованы, если сеансовый ключ скомпрометирован.
sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
Это займет некоторое время — около часа, в зависимости от скорости вашего сервера. Возьмите с собой ланч и немного позже вернитесь к своему терминалу, чтобы настроить Nginx.
Создать самоподписанный сертфикат типа code signing для подписывания кода
В PoweShell 3.0 командлет New-SelfSifgnedCertificate позволял генерировать только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).
В версии PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.
Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:
$cert = New-SelfSignedCertificate -Subject “Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:LocalMachineMy
Теперь можно подписать ваш PowerShell скрипт эти сертификатом:
Set-AuthenticodeSignature -FilePath C:PStest_script.ps1 -Certificate $cert
Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.
Нужно переместить его в корневые сертификаты (не забывайте периодически проверять хранилище сертификатов Windows на наличие недоверенных сертфикатов и обновлять списки корневых сертификатов):
Требования
Чтобы следовать данному руководству, нужно создать нового пользователя с расширенными привилегиями sudo (root использовать не рекомендуется). Всю необходимую информацию по этому вопросу можно найти в статье «Начальная настройка сервера Ubuntu 14.04».
Кроме того, нужно предварительно установить Nginx. Чтобы установить всю группу программ LEMP (Linux, Nginx, MySQL, PHP), читайте руководство «Установка LEMP stack на Ubuntu 14.04»
Чтобы установить только Nginx, введите:
sudo apt-get updatesudo apt-get install nginx
Шаг 1. создание конфигурации фрагмента с данными ssl-сертификата.
Давайте создадим новый файл конфигурации snippet, а именно «self-signed.conf», для указания наших сгенерированных сведений о самоподписываемом сертификате внутри папки фрагмента Nginx: /etc/nginx/snippets/, как показано ниже:
Шаг 1. создание собственного самоподписанного доверенного сертификата.
Собственный доверенный сертификат (Certificate Authority или CA) необходим для подписи клиентских сертификатов и для их проверки при авторизации клиента веб-сервером.С помощью приведенной ниже команды создается закрытый ключ и самоподписанный сертификат.
Шаг 2. создание конфигурации фрагмента для поддержки параметров strong и secure ssl, преодолевающих возможные уязвимости ssl.
Во-вторых, нам необходимо поддерживать полностью функциональную и надежную конфигурацию SSL-сервера, защищающую наш сервер от всех возможных уязвимостей SSL.
Я настроил свой Nginx с помощью сильного набора SSL-шифров и включил некоторые дополнительные функции для обеспечения безопасности сервера.
Все эти параметры включены в файл: /etc/nginx/snippets/ssl-params.conf
cat /etc/nginx/snippets/ssl-params.conf ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH AESGCM:EDH AESGCM:AES256 EECDH:AES256 EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling off; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; ssl_dhparam /etc/ssl/certs/dhparam.pem;
Как вы можете видеть, мы установили параметр ssl_dhparam для указания на файл Diffie-Hellman, который мы сгенерировали ранее.
После внесения этих изменений вы можете сохранить конфигурацию и выйти.
Шаг 3. обновление виртуального хоста домена с помощью приведенных выше настроек фрагмента для включения ssl.
Мы готовы с нашей необходимой конфигурацией фрагментов, теперь мы можем включить их в наш виртуальный хост домена и включить SSL.
Здесь, в этой статье, я использую файл конфигурации по умолчанию Nginx, расположенный по адресу /etc/nginx /sites-available/default.
Я изменил этот файл, чтобы включить SSL и получить сгенерированные самоподписанные сертификаты.
См. Измененный раздел ниже в этой конфигурации:
Заключение
Теперь, когда сертификат создан и доверие к нему обеспечено, вы без проблем можете посещать свой локальный домен! Обслуживание приложений стало безопасным, и вы можете спокойно продолжать разработку. Возвращаясь к примеру с Express, результат на экране будет таким:
Сайт полностью загружен, и рядом с URL в Chrome теперь отображается символ безопасного соединения.
Вывод
В этом руководстве мы показали, как создать самозаверяющий сертификат SSL с помощью инструмента openssl. Теперь, когда у вас есть сертификат, вы можете настроить приложение для его использования.
