Учебники

Linux Admin — Создание SSL-сертификатов

TLS — это новый стандарт безопасности на уровне сокетов, использующий SSL. TLS предлагает лучшие стандарты шифрования с другими функциями защиты и оболочки протокола, улучшающими SSL. Часто термины TLS и SSL используются взаимозаменяемо. Однако, как профессиональный администратор CentOS, важно отметить различия и историю, разделяющую каждого из них.

SSL идет до версии 3.0. SSL был разработан и продвигается как отраслевой стандарт под Netscape. После покупки Netscape AOL (популярным в 90-х провайдером, также известным как America Online) интернет-провайдер так и не стал продвигать изменения, необходимые для улучшения безопасности SSL.

В версии 3.1 технология SSL перешла на стандарты открытых систем и была заменена на TLS . Поскольку авторские права на SSL все еще принадлежали AOL, был придуман новый термин: TLS — безопасность транспортного уровня . Поэтому важно признать, что TLS на самом деле отличается от SSL . Особенно, поскольку старые технологии SSL имеют известные проблемы безопасности, а некоторые сегодня считаются устаревшими.

Примечание. В этом руководстве будет использоваться термин TLS, когда речь идет о технологиях 3.1 и выше. Тогда SSL при комментировании специфичен для технологий SSL 3.0 и ниже.

SSL против версии TLS

В следующей таблице показано, как версии TLS и SSL будут связаны друг с другом. Я слышал, как несколько человек говорят на языке SSL версии 3.2. Тем не менее, они, вероятно, получили терминологию от чтения блога. Как профессиональный администратор, мы всегда хотим использовать стандартную терминологию. Следовательно, во время разговора SSL должен быть ссылкой на прошлые технологии. Простые вещи могут сделать соискателя CentOS похожим на опытного CS Major.

TLS SSL
3.0
1,0 3,1
1,1 3,2
1.2 3,3

TLS выполняет две основные функции, важные для пользователей Интернета сегодня: во-первых, он проверяет, кто является стороной, известный как аутентификация . Во-вторых, он предлагает сквозное шифрование на транспортном уровне для протоколов верхнего уровня, в которых отсутствует эта встроенная функция (ftp, http, протоколы электронной почты и т. Д.).

Во-первых, проверяется, кто является стороной и важен для безопасности как сквозное шифрование. Если потребитель имеет зашифрованное соединение с веб-сайтом, который не имеет права принимать платежи, финансовые данные все еще находятся под угрозой. Это то, что у каждого фишингового сайта не будет: правильно подписанный сертификат TLS, подтверждающий, что операторы веб-сайтов утверждают, что они являются доверенными центрами сертификации .

Есть только два способа обойтись без наличия надлежащим образом подписанного сертификата: обманом заставить пользователя разрешить доверие веб-браузера к самоподписанному сертификату или надеяться, что пользователь не разбирается в технологиях и не будет знать о важности доверенного сертификата. Орган (или ЦС).

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

Установите и настройте openssl

openssl является стандартом для реализации TLS с открытым исходным кодом. openssl используется в таких системах, как Linux, дистрибутивы BSD, OS X и даже поддерживает Windows.

openssl важен, поскольку он обеспечивает безопасность транспортного уровня и предоставляет подробное программирование аутентификации и сквозного шифрования для разработчика. Вот почему openssl используется практически с каждым приложением с открытым исходным кодом, использующим TLS. Он также установлен по умолчанию в каждой современной версии Linux.

По умолчанию openssl должен быть установлен на CentOS начиная с версии не ниже 5. Просто чтобы убедиться, давайте попробуем установить openssl через YUM. Просто запустите install, поскольку YUM достаточно умен, чтобы сообщить нам, если пакет уже установлен. Если мы используем более старую версию CentOS по соображениям совместимости, установка yum -y обеспечит обновление openssl относительно недавней уязвимости с сердечным кровотечением.

При запуске установщика было обнаружено, что на самом деле было обновление для openssl .

[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for 
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution 
Dependencies Resolved

===============================================================================
=============================================================================== 
 Package                               Arch
 Version                            Repository                        Size 
=============================================================================== 
=============================================================================== 
Updating: 
openssl                               x86_64                          
1:1.0.1e-60.el7_3.1                 updates                           713 k
Updating for dependencies:

Создать самоподписанный сертификат для OpenLDAP

Это метод создания самоподписанного для нашей предыдущей установки OpenLDAP .

Создать самозаверяющий сертификат OpenLDAP.

openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365

[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem 
-keyout /etc/openldap/certs/vmnet.pem -days 365 
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
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.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:bob@bobber.net
[root@centos]#

Теперь наши сертификаты OpenLDAP должны быть помещены в / etc / openldap / certs /

[root@centos]# ls /etc/openldap/certs/*.pem 
/etc/openldap/certs/vmnetcert.pem  /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Как видите, у нас есть и сертификат, и ключ, установленные в каталогах / etc / openldap / certs / . Наконец, нам нужно изменить разрешения для каждого, так как они в настоящее время принадлежат пользователю root.

[root@centos]# chown -R  ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem 
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Создайте самоподписанный сертификат для веб-сервера Apache

В этом уроке мы будем предполагать, что Apache уже установлен. Мы установили Apache в другом учебнике (настройка CentOS Firewall) и перейдем к расширенной установке Apache для будущего учебника. Итак, если вы еще не установили Apache, пожалуйста, следуйте инструкциям.

После установки Apache HTTPd можно выполнить следующие шаги:

Шаг 1 — Установите mod_ssl для сервера Apache httpd.

Сначала нам нужно настроить Apache с помощью mod_ssl. Используя менеджер пакетов YUM, это довольно просто —

[root@centos]# yum -y install mod_ssl

Затем перезагрузите ваш демон Apache, чтобы убедиться, что Apache использует новую конфигурацию.

[root@centos]# systemctl reload httpd

На этом этапе Apache настроен для поддержки соединений TLS на локальном хосте.

Шаг 2 — Создайте самоподписанный сертификат ssl.

Во-первых, давайте настроим наш личный каталог ключей TLS.

[root@centos]# mkdir /etc/ssl/private 
[root@centos]# chmod 700 /etc/ssl/private/

Примечание. Убедитесь, что только корень имеет доступ для чтения / записи к этому каталогу. С мировым доступом для чтения / записи ваш закрытый ключ может быть использован для расшифровки прослушанного трафика.

Генерация сертификата и файлов ключей.

[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt 
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:

[root@centos]#

Примечание. Вы можете использовать публичный IP-адрес сервера, если у вас нет зарегистрированного доменного имени.

Давайте посмотрим на наш сертификат —

[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
   Data:
      Version: 3 (0x2)
      Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
   Signature Algorithm: sha256WithRSAEncryption
   Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Validity
      Not Before: Feb 24 07:07:55 2017 GMT
      Not After : Feb 24 07:07:55 2018 GMT
   Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
         Public-Key: (2048 bit)
            Modulus:
               00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
               f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
               57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
               47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
               66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
               31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
               9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
               79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
               e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
               ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
               ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
               e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42: 
               7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
               5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
               c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
               6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
               12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:

Вот объяснение каждой опции, которую мы использовали с командой openssl

команда действие
req -X509 Для управления ключами используйте стандарт PKI управления CSR X.509.
-nodes Не защищайте наш сертификат парольной фразой. Apache должен иметь возможность использовать сертификат без прерывания парольной фразы.
-дней 2555 Говорит срок действия сертификата до 7 лет или 2555 дней. Период времени можно отрегулировать по мере необходимости.
-newkey rsa: 2048 Предназначен для генерации ключа и сертификата с использованием RSA длиной 2048 бит.

Далее мы хотим создать группу Диффи-Хелимана для ведения переговоров о PFS с клиентами.

[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Это займет от 5 до 15 минут.

Perfect Forward Secrecy — используется для защиты данных сеанса в случае взлома закрытого ключа. Это создаст ключ, используемый между клиентом и сервером, который является уникальным для каждого сеанса.

Теперь добавьте конфигурацию Perfect Forward Secrecy в наш сертификат.

[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt

Настройте Apache для использования файлов ключей и сертификатов

Мы будем вносить изменения в /etc/httpd/conf.d/ssl.conf

Мы внесем следующие изменения в ssl.conf . Однако, прежде чем мы это сделаем, мы должны создать резервную копию исходного файла. При внесении изменений на рабочий сервер в расширенном текстовом редакторе, таком как vi или emcas , рекомендуется всегда делать резервные копии файлов конфигурации перед внесением изменений.

[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/

Теперь давайте продолжим редактирование после копирования известной рабочей копии ssl.conf в корень нашей домашней папки.

  • разместить
  • Отредактируйте оба DocumentRoot и ServerName следующим образом.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443

DocumentRoot — это путь к каталогу Apache по умолчанию. В этой папке должна быть страница по умолчанию, на которой будет отображаться HTTP-запрос с запросом страницы по умолчанию вашего веб-сервера или сайта.

Имя_сервера — это имя сервера, которое может быть IP-адресом или именем хоста сервера. Для TLS рекомендуется создать сертификат с именем хоста. Из нашего учебного руководства по OpenLdap мы создали имя хоста centos в локальном домене предприятия: vmnet.local

Теперь мы хотим прокомментировать следующие строки.

SSLProtocol

#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
 ~~~~> #SSLProtocol all -SSLv2
 
#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
 ~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

Затем сообщите Apache, где найти наш сертификат и пару секретных / открытых ключей.

Укажите путь к нашему самозаверяющему файлу сертификата

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key

Наконец, нам нужно разрешить входящие подключения к https через порт 443.