Spec-Zone.ru › MySQL 5.7

6.3.3.2 Создание сертификатов и ключей SSL с помощью openssl

В этом разделе описывается, как использовать команду openssl для настройки файлов сертификатов и ключей SSL, которые будут использоваться серверами и клиентами MySQL. Первый пример демонстрирует упрощённую процедуру, такую как вы можете использовать из командной строки. Второй показывает скрипт, содержащий больше деталей. Первые два примера предназначены для использования в Unix и оба используют команду openssl, которая является частью OpenSSL. Третий пример описывает, как настроить файлы SSL в Windows.

Примечание

Существуют более простые альтернативы генерации файлов, необходимых для SSL, чем описанная здесь процедура: позвольте серверу автоматически сгенерировать их или используйте программу mysql_ssl_rsa_setup. См. Раздел 6.3.3.1, «Создание сертификатов и ключей SSL и RSA с помощью MySQL».

Важно

Какой бы метод вы ни использовали для генерации файлов сертификатов и ключей, значения Общего имени, используемые для серверных и клиентских сертификатов/ключей, должны отличаться от значения Общего имени, используемого для сертификата CA. В противном случае файлы сертификатов и ключей не будут работать для серверов, скомпилированных с использованием OpenSSL. Типичная ошибка в этом случае:

ERROR 2026 (HY000): SSL connection error:
error:00000001:lib(0):func(0):reason(1)
Важно

Если клиент, подключающийся к экземпляру сервера MySQL, использует сертификат SSL с расширением extendedKeyUsage (расширением X.509 v3), расширенное использование ключа должно включать аутентификацию клиента (clientAuth). Если сертификат SSL указан только для аутентификации сервера (serverAuth) и других целей, не связанных с клиентом, проверка сертификата завершается неудачей, и клиентское подключение к экземпляру сервера MySQL завершается ошибкой. Нет расширения extendedKeyUsage в сертификатах SSL, созданных с помощью команды openssl в соответствии с инструкциями в этой теме. Если вы используете свой собственный сертификат клиента, созданный другим способом, убедитесь, что любое расширение extendedKeyUsage включает аутентификацию клиента.

  • Пример 1: Создание файлов SSL из командной строки в Unix

  • Пример 2: Создание файлов SSL с помощью скрипта в Unix

  • Пример 3: Создание файлов SSL в Windows

Пример 1: Создание файлов SSL из командной строки в Unix

Следующий пример показывает набор команд для создания файлов сертификатов и ключей сервера и клиента MySQL. Вы должны ответить на несколько запросов команд openssl. Для генерации тестовых файлов вы можете нажать Enter на все запросы. Для генерации файлов для использования в рабочей среде вы должны предоставить непустые ответы.

# Create clean environment
rm -rf newcerts
mkdir newcerts && cd newcerts

# Create CA certificate
openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 3600 \
        -key ca-key.pem -out ca.pem

# Create server certificate, remove passphrase, and sign it
# server-cert.pem = public key, server-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
        -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 3600 \
        -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

# Create client certificate, remove passphrase, and sign it
# client-cert.pem = public key, client-key.pem = private key
openssl req -newkey rsa:2048 -days 3600 \
        -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 3600 \
        -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

После генерации сертификатов проверьте их:

openssl verify -CAfile ca.pem server-cert.pem client-cert.pem

Вы должны увидеть ответ, похожий на этот:

server-cert.pem: OK
client-cert.pem: OK

Чтобы увидеть содержимое сертификата (например, чтобы проверить диапазон дат, в течение которого сертификат действителен), вызовите openssl так:

openssl x509 -text -in ca.pem
openssl x509 -text -in server-cert.pem
openssl x509 -text -in client-cert.pem

Теперь у вас есть набор файлов, которые могут использоваться следующим образом:

  • ca.pem: Используйте это для установки переменной системы ssl_ca на стороне сервера и параметра --ssl-ca на стороне клиента. (Сертификат CA, если он используется, должен быть одинаковым на обеих сторонах.)

  • server-cert.pem, server-key.pem: Используйте их для установки переменных системы ssl_cert и ssl_key на стороне сервера.

  • client-cert.pem, client-key.pem: Используйте их в качестве аргументов для параметров --ssl-cert и --ssl-key на стороне клиента.

Для дополнительных инструкций по использованию см. Раздел 6.3.1, «Настройка MySQL для использования шифрованных соединений».

Пример 2: Создание файлов SSL с помощью скрипта в Unix

Вот пример скрипта, показывающий, как настроить файлы сертификатов и ключей SSL для MySQL. После выполнения скрипта используйте файлы для SSL-соединений, как описано в Разделе 6.3.1, «Настройка MySQL для использования шифрованных соединений».

DIR=`pwd`/openssl
PRIV=$DIR/private

mkdir $DIR $PRIV $DIR/newcerts
cp /usr/share/ssl/openssl.cnf $DIR
replace ./demoCA $DIR -- $DIR/openssl.cnf

# Create necessary files: $database, $serial and $new_certs_dir
# directory (optional)

touch $DIR/index.txt
echo "01" > $DIR/serial

#
# Generation of Certificate Authority(CA)
#

openssl req -new -x509 -keyout $PRIV/cakey.pem -out $DIR/ca.pem \
    -days 3600 -config $DIR/openssl.cnf

# Sample output:
# Using configuration from /home/finley/openssl/openssl.cnf
# Generating a 1024 bit RSA private key
# ................++++++
# .........++++++
# writing new private key to '/home/finley/openssl/private/cakey.pem'
# Enter PEM pass phrase:
# Verifying password - Enter PEM pass phrase:
# -----
# 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) [AU]:FI
# State or Province Name (full name) [Some-State]:.
# Locality Name (eg, city) []:
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:MySQL AB
# Organizational Unit Name (eg, section) []:
# Common Name (eg, YOUR name) []:MySQL admin
# Email Address []:

#
# Create server request and key
#
openssl req -new -keyout $DIR/server-key.pem -out \
    $DIR/server-req.pem -days 3600 -config $DIR/openssl.cnf

# Sample output:
# Using configuration from /home/finley/openssl/openssl.cnf
# Generating a 1024 bit RSA private key
# ..++++++
# ..........++++++
# writing new private key to '/home/finley/openssl/server-key.pem'
# Enter PEM pass phrase:
# Verifying password - Enter PEM pass phrase:
# -----
# 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) [AU]:FI
# State or Province Name (full name) [Some-State]:.
# Locality Name (eg, city) []:
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:MySQL AB
# Organizational Unit Name (eg, section) []:
# Common Name (eg, YOUR name) []:MySQL server
# Email Address []:
#
# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:
# An optional company name []:

#
# Remove the passphrase from the key
#
openssl rsa -in $DIR/server-key.pem -out $DIR/server-key.pem

#
# Sign server cert
#
openssl ca -cert $DIR/ca.pem -policy policy_anything \
    -out $DIR/server-cert.pem -config $DIR/openssl.cnf \
    -infiles $DIR/server-req.pem

# Sample output:
# Using configuration from /home/finley/openssl/openssl.cnf
# Enter PEM pass phrase:
# Check that the request matches the signature
# Signature ok
# The Subjects Distinguished Name is as follows
# countryName           :PRINTABLE:'FI'
# organizationName      :PRINTABLE:'MySQL AB'
# commonName            :PRINTABLE:'MySQL admin'
# Certificate is to be certified until Sep 13 14:22:46 2003 GMT
# (365 days)
# Sign the certificate? [y/n]:y
#
#
# 1 out of 1 certificate requests certified, commit? [y/n]y
# Write out database with 1 new entries
# Data Base Updated

#
# Create client request and key
#
openssl req -new -keyout $DIR/client-key.pem -out \
    $DIR/client-req.pem -days 3600 -config $DIR/openssl.cnf

# Sample output:
# Using configuration from /home/finley/openssl/openssl.cnf
# Generating a 1024 bit RSA private key
# .....................................++++++
# .............................................++++++
# writing new private key to '/home/finley/openssl/client-key.pem'
# Enter PEM pass phrase:
# Verifying password - Enter PEM pass phrase:
# -----
# 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) [AU]:FI
# State or Province Name (full name) [Some-State]:.
# Locality Name (eg, city) []:
# Organization Name (eg, company) [Internet Widgits Pty Ltd]:MySQL AB
# Organizational Unit Name (eg, section) []:
# Common Name (eg, YOUR name) []:MySQL user
# Email Address []:
#
# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:
# An optional company name []:

#
# Remove the passphrase from the key
#
openssl rsa -in $DIR/client-key.pem -out $DIR/client-key.pem

#
# Sign client cert
#

openssl ca -cert $DIR/ca.pem -policy policy_anything \
    -out $DIR/client-cert.pem -config $DIR/openssl.cnf \
    -infiles $DIR/client-req.pem

# Sample output:
# Using configuration from /home/finley/openssl/openssl.cnf
# Enter PEM pass phrase:
# Check that the request matches the signature
# Signature ok
# The Subjects Distinguished Name is as follows
# countryName           :PRINTABLE:'FI'
# organizationName      :PRINTABLE:'MySQL AB'
# commonName            :PRINTABLE:'MySQL user'
# Certificate is to be certified until Sep 13 16:45:17 2003 GMT
# (365 days)
# Sign the certificate? [y/n]:y
#
#
# 1 out of 1 certificate requests certified, commit? [y/n]y
# Write out database with 1 new entries
# Data Base Updated

#
# Create a my.cnf file that you can use to test the certificates
#

cat <<EOF > $DIR/my.cnf
[client]
ssl-ca=$DIR/ca.pem
ssl-cert=$DIR/client-cert.pem
ssl-key=$DIR/client-key.pem
[mysqld]
ssl_ca=$DIR/ca.pem
ssl_cert=$DIR/server-cert.pem
ssl_key=$DIR/server-key.pem
EOF
Пример 3: Создание файлов SSL в Windows

Загрузите OpenSSL для Windows, если он не установлен на вашей системе. Обзор доступных пакетов можно посмотреть здесь:

http://www.slproweb.com/products/Win32OpenSSL.html

Выберите пакет Win32 OpenSSL Light или Win64 OpenSSL Light в зависимости от вашей архитектуры (32-битная или 64-битная). Стандартное расположение установки — C:\OpenSSL-Win32 или C:\OpenSSL-Win64, в зависимости от загруженного пакета. В следующих инструкциях предполагается стандартное расположение C:\OpenSSL-Win32. Измените его при необходимости, если вы используете 64-битный пакет.

Если во время установки появится сообщение, указывающее на '...critical component is missing: Microsoft Visual C++ 2008 Redistributables', отмена установки и загрузите один из следующих пакетов, снова в зависимости от вашей архитектуры (32-битная или 64-битная):

  • Visual C++ 2008 Redistributables (x86), доступный по адресу:

    http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF
    
  • Visual C++ 2008 Redistributables (x64), доступный по адресу:

    http://www.microsoft.com/downloads/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6
    

После установки дополнительного пакета перезапустите процедуру установки OpenSSL.

Во время установки оставьте стандартный C:\OpenSSL-Win32 в качестве пути установки, а также оставьте выбранным стандартный параметр 'Copy OpenSSL DLL files to the Windows system directory'.

После завершения установки добавьте C:\OpenSSL-Win32\bin в переменную системного пути вашего сервера (в зависимости от вашей версии Windows, следующие инструкции по настройке пути могут незначительно отличаться):

  1. В окне рабочего стола щелкните правой кнопкой мыши значок Мой компьютер и выберите Свойства.

  2. Выберите вкладку Дополнительно в появившемся меню Свойства системы и нажмите кнопку Переменные среды.

  3. В разделе Системные переменные выберите Путь, затем нажмите кнопку Изменить. Должно появиться диалоговое окно Изменение системной переменной.

  4. Добавьте ';C:\OpenSSL-Win32\bin' в конец (обратите внимание на точку с запятой).

  5. Нажмите кнопку «ОК» 3 раза.

  6. Проверьте, что OpenSSL был правильно интегрирован в переменную PATH, открыв новую консоль (Пуск>Выполнить>cmd.exe) и убедившись, что OpenSSL доступен:

    Microsoft Windows [Version ...]
    Copyright (c) 2006 Microsoft Corporation. All rights reserved.
    
    C:\Windows\system32>cd \
    
    C:\>openssl
    OpenSSL> exit <<< If you see the OpenSSL prompt, installation was successful.
    
    C:\>
    

После установки OpenSSL используйте инструкции, аналогичные инструкциям из Примера 1 (показанного ранее в этом разделе), с внесением следующих изменений:

  • Измените следующие команды Unix:

    # Create clean environment
    rm -rf newcerts
    mkdir newcerts && cd newcerts
    

    В Windows используйте эти команды вместо этого:

    # Create clean environment
    md c:\newcerts
    cd c:\newcerts
    
  • Когда в конце строки команды отображается символ '\', этот символ '\' необходимо удалить, и все строки команд должны быть введены в одну строку.

После генерации файлов сертификата и ключа, чтобы использовать их для SSL-соединений, см. Раздел 6.3.1, «Настройка MySQL для использования шифрованных соединений».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/creating-ssl-files-using-openssl.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API