Валентин Бруй, Сергей Карлов
Linux-сервер: пошаговые инструкции инсталляции и настройки
| Главная | Главы из книги | Конфигурационные файлы | Скачать |

Глава 12. OpenSSL - программное обеспечение для безопасной передачи данных



В этой главе:
1. Ограничения и допущения
2. Пакеты
3. Инсталляция с помощью rpm-пакетов
4. Компиляция, оптимизация и инсталляция OpenSSL
5. Конфигурирование OpenSSL
6. Тестирование OpenSSL


Большинство сетевых протоколов, используемых в Интернете, например, IMAP, POP, SQL, SMTP, SMB, HTTP, FTP и LDAP, обеспечивают поддержку шифрования информации по протоколу SSL. Обычно шифрование используется для скрытия от злоумышленников передаваемых по сетям общего пользования логинов и паролей доступа к различным ресурсам, например, средствам администрирования через Web-интерфейс акаунтов для предоставления различных услуг (хостинг, электронная почта, управление мобильным телефоном и т. п.), почтовым ящикам, закрытым каталогам на FTP и Web-серверах для передачи различных конфиденциальных сообщений (например, ЦРУ имеет на своем сервере http://www.cia.gov форму, предназначенную для приема информации, которая при передаче будет зашифрована).
При передаче аутентификационной информации в виде обычного текста она может быть перехвачена третьими лицами с использованием программ-сниферов и использована для получения несанкционированного доступа к вашим ресурсам. Например, одна неверная супруга, ведущая переписку с любовником через почтовый ящик на http://www.mail.com, где логин и пароль передаются в виде обычного текста, была поймана с поличным (в полученном ей письме содержалась информация о месте и времени встречи). Аутентификационные параметры для доступа к почтовому ящику были получены мужем с помощью снифера, установленного на системе в локальной сети офиса, где работала беспечная дама.
В настоящее время протокол SSL практически незаметно для пользователя взаимодействует с остальными протоколами Интернет и обеспечивает передачу конфиденциальной информации по сетям общего пользования в зашифрованном виде.
Программное обеспечение OpenSSL поддерживает протоколы SSL v2/v3 (Secure Sockets Layer) и TLS v1 (Transport Layer Security). Большинство программ, описанных в этой книге, требует установки OpenSSL. Группа разработчиков предупреждает, что использование алгоритмов RC5 и IDEA, также реализованных в OpenSSL, требует получения соответствующих лицензий, и рекомендует проконсультироваться на эту тему с вашим юристом. Для исключения из OpenSSL этих алгоритмов при установке на вашем компьютере исходные коды необходимо сконфигурировать с опциями no-rc5 и no-idea.
В этой главе описаны процедуры установки, настройки и тестирования OpenSSL, включая операции по генерации и подписи ключей, применяемых для шифрования передаваемой по сетям общего пользования информации с использованием протоколов Интернет, поддерживающих OpenSSL.

Ограничения и допущения

[Назад] [В этой главе] [Далее]

Исходные коды находятся в каталоге /var/tmp. Все операции выполняются пользователем с учетной записью root. Используется дистрибутив ASPLinux 7.3 (Vostok). Перекомпиляция ядра не требуется.

Процедуры, описанные в этой главе, могут оказаться применимыми для других версий ядра и дистрибутивов Linux, но авторы это не проверяли.

ЗАМЕЧАНИЕ В некоторых странах ввоз, распространение и использование программного обеспечения для криптографии запрещено. Компиляцию, оптимизацию, инсталляцию и тестирование OpenSSL авторы осуществляли на системе, находящейся на территории страны, где использование программного обеспечения для криптографии не запрещено.

Пакеты

[Назад] [В этой главе] [Далее]

Последующие рекомендации основаны на информации, полученной с домашней страницы проекта OpenSSL по состоянию на 22.03.2003. Регулярно посещайте домашнюю страницу проекта http://www.openssl.org/ и отслеживайте обновления. Исходные коды OpenSSL содержатся в архиве openssl-version.html (последняя доступная на момент написания главы стабильная версия openssl-0.9.7a.tar.gz).

Инсталляция с помощью rpm-пакетов

[Назад] [В этой главе] [Далее]

Если вы предпочитаете использование системы со стандартным ядром и программным обеспечением, установленным из rpm-пакетов, для установки или обновления пакета необходимо выполнить следующие операции.

ЗАМЕЧАНИЕ Авторы настоятельно рекомендуют устанавливать программное обеспечение из исходных кодов.

Шаг 1
Проверьте, установлен ли пакет openssl с помощью следующей команды:
[root@dymatel /]# rpm -iq openssl

Шаг 2
Если пакет не установлен, перейдите в каталог, где находится пакет openssl-0.9.6b-24asp.i686.rpm.
Если вы в соответствии с рекомендациями главы 2 скопировали все пакеты, входящие в дистрибутив, в каталог /home/distrib, то выполните команду:
[root@dymatel /]# cd /home/distrib

и установите:
[root@dymatel distrib]# rpm -ihv openssl-0.9.6b-24asp.i686.rpm

или обновите пакет:
[root@dymatel distrib]# rpm -Uhv openssl-0.9.6b-24asp.i686.rpm

После установки пакета перейдите к настройке OpenSSL, описанной ниже.

Компиляция, оптимизация и инсталляция OpenSSL

[Назад] [В этой главе] [Далее]

Шаг 1
Проверьте целостность данных и подлинность архива, содержащего исходные коды OpenSSL. Одним из способов проверки подлинности и целостности архива является определение его контрольной суммы MD5 и сравнение ее с суммой, опубликованной на сервере разработчика (контрольная сумма MD5 архива openssl-0.9.7a.tar.gz содержится в файле ftp://ftp.openssl.org/source/openssl-0.9.7a.tar.gz.md5 ). Определите контрольную сумму MD5 пакета:
[root@dymatel /]# cd /var/tmp/

[root@drwalbr tmp]# md5sum openssl-0.9.7a.tar.gz
a0d3203ecf10989fdc61c784ae82e531 openssl-0.9.7a.tar.gz

Скачайте c сервера разработчика файл, содержащий контрольную сумму MD5 архива openssl-0.9.7a.tar.gz:
[root@drwalbr tmp]# wget ftp://ftp.openssl.org/source/openssl-0.9.7a.tar.gz.md5

и сравните ее c контрольной суммой, полученной с помощью команды md5sum:
[root@drwalbr tmp]# cat openssl-0.9.7a.tar.gz.md5
a0d3203ecf10989fdc61c784ae82e531

Если полученные значения сумм совпадают, значит в вашем распоряжении находится подлинный и сохранивший целостность при передаче по сетям общего пользования архив с исходными кодами OpenSSL. Подлинность архива также может быть проверена с использованием утилит GnuPG. Для этого вам необходимо получить с сервера разработчика файлы, содержащие открытый ключ GPG (по непонятным для авторов причинам он находится не на сервере http://www.openssl.org, а на сервере одного из членов команды разработчиков http://richard.levitte.org/pubkey2.asc ):
[root@drwalbr tmp]# wget http://richard.levitte.org/pubkey2.asc

и сигнатуру архива openssl-0.9.7a.tar.gz:
[root@drwalbr tmp]# wget ftp://ftp.openssl.org/source/openssl-0.9.7a.tar.gz.asc

После получения необходимых файлов импортируйте открытый ключ pubkey2.asc в базу ваших GPG ключей:
[root@drwalbr tmp]# gpg --import pubkey2.asc
gpg: key E06D2CB1: public key "levitte@openssl.org" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)

Подтвердите подлинность добавленного ключа:
[root@drwalbr tmp]# gpg --sign-key levitte@openssl.org

pub 2048R/E06D2CB1 created: 1998-09-18 expires: never trust: -/-
(1). levitte@openssl.org
(2) Richard Levitte
(3) Richard Levitte

Really sign all user IDs? y

pub 2048R/E06D2CB1 created: 1998-09-18 expires: never trust: -/-
Primary key fingerprint: 35 3E 6C 9E 8C 97 85 24 BD 9F D1 9E 8F 75 23 6B

levitte@openssl.org
Richard Levitte
Richard Levitte
How carefully have you verified the key you are about to sign actually
belongs
to the person named above? If you don't know what to answer, enter "0".

(0) I will not answer. (default)
(1) I have not checked at all.
(2) I have done casual checking.
(3) I have done very careful checking.

Your selection? 3
Are you really sure that you want to sign this key
with your key: "root.drwalbr "

I have checked this key very carefully.

Really sign? y

You need a passphrase to unlock the secret key for
user: "root.drwalbr "
1024-bit DSA key, ID E3A03FAD, created 2003-05-10

Enter passphrase: $ecretnoe_Slovo_root.drwalbr

и проверьте подлинность архива:
[root@drwalbr tmp]# gpg --verify openssl-0.9.7a.tar.gz.asc openssl-0.9.7a.tar.gz

Если вы получите вывод вида:
gpg: Signature made Wed Feb 19 16:07:58 2003 MSK using RSA key ID E06D2CB1
gpg: Good signature from "levitte@openssl.org"
gpg: aka "Richard Levitte "
gpg: aka "Richard Levitte "
gpg: checking the trustdb
gpg: checking at depth 0 signed=1 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: checking at depth 1 signed=0 ot(-/q/n/m/f/u)=1/0/0/0/0/0

то значит, в вашем распоряжении находится подлинный и сохранивший целостность при передаче по сетям общего пользования архив с исходными кодами OpenSSL.

Шаг 2
Распакуйте архив с исходными кодами OpenSSL в каталоге /var/tmp:
[root@dymatel tmp]# tar xzpf openssl-0.9.7a.tar.gz

и перейдите во вновь созданный каталог, содержащий исходные коды OpenSSL:
[root@dymatel tmp]# cd openssl-0.9.7a/

Для демонстрации возможностей предлагаемых средств проверки подлинности архивов авторы вставили лишний байт, соответствующий символу "пробел" в архив openssl-0.9.7a.tar.gz и проверили его подлинность с помощью утилит md5sum и gpg:
[root@drwalbr tmp]# md5sum openssl-0.9.7a.tar.gz
c0312ab825c0c9465e411b1475ab5d47 openssl-0.9.7a.tar.gz

[root@drwalbr tmp]# gpg --verify openssl-0.9.7a.tar.gz.asc openssl-0.9.7a.tar.gz
gpg: Signature made Wed Feb 19 16:07:58 2003 MSK using RSA key ID E06D2CB1
gpg: BAD signature from "levitte@openssl.org"

Утилита md5sum выдала контрольную сумму:
c0312ab825c0c9465e411b1475ab5d47
не соответствующую контрольной сумме, указанной на сервере разработчиков программного продукта:
a0d3203ecf10989fdc61c784ae82e531
а утилита gpg сообщила о неправильной сигнатуре архивного файла:
gpg: BAD signature from "levitte@openssl.org"


ЗАМЕЧАНИЕ Проверка подлинности и целостности скачиваемых архивов очень важна, с точки зрения обеспечения безопасности вашей системы. Если пробел, который мы вставили выше, непреднамеренно или специально был бы вставлен в строку сценария, удаляющего после инсталляции OpenSSL ненужные временные файлы, т.е. строка вида:
rm -rf /some_path/*
была бы заменена на:
rm -rf /some_path /*
в результате выполнения сценария были бы удалены все файлы в вашей системе. Модифицированная команда сначала бы удалила каталог /some_path, а затем все в корневом каталоге системы - /*.

Шаг 3
Для оптимизации откомпилированного кода OpenSSL применительно к процессору, используемому на вашей системе, в файле /var/tmp/openssl-0.9.7a/Configure замените сроку:
"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
на:
"linux-elf", "gcc:-DL_ENDIAN -DTERMIO -O3 -march=i686 -funroll-loops -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",

Строку:
"debug-linux-elf", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -m486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
на:
"debug-linux-elf", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -O3 -march=i686 -funroll-loops -fomit-frame-pointer -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",

Строку:
"debug-linux-elf-noefence", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -O3 -g -m486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
на:
"debug-linux-elf-noefence", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -O3 -march=i686 -funroll-loops -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",

Шаг 4
В исходных кодах OpenSSL предполагается, что интерпретатор perl находится в каталоге /usr/local/bin/. Если вы точно следовали нашим рекомендациям по первичной установке системы, то интерпретатор должен находится в каталоге /usr/bin/perl. Для того, чтобы программа установки OpenSSL могла воспользоваться интерпретатором perl, выполните команду:
[root@dymatel openssl-0.9.7a]# perl util/perlpath.pl /usr/bin/perl

Шаг 5
Сконфигурируйте исходные коды OpenSSL:
[root@dymatel openssl-0.9.7a]#./configure linux-elf no-asm shared \
--prefix=/usr \
--openssldir=s/usr/share/ss1

Шаг 6
Откомпилируйте исходные коды, проверьте правильность компиляции и наличие соответствующих библиотек, проинсталлируйте файлы OpenSSL, создайте и сохраните список инсталлированных файлов:
[root@dymatel openssl-0.9.7a]# LD_LIBRARY_PATH=`pwd` make all build-shared
[root@dymatel openssl-0.9.7a]# LD_LIBRARY_PATH=`pwd` make tests apps tests
[root@dymatel openssl-0.9.7a]# find /* > /root/openssl1
[root@dymatel openssl-0.9.7a]# make install build-shared
[root@dymatel openssl-0.9.7a]# cd /usr/lib
[root@dymatel lib]# mv libcripto.so.0.9.7 ../../lib/
[root@dymatel lib]# mv libssl.so.0.9.7 ../../lib/
[root@dymatel lib]# ln -sf ../../lib/libcripto.so.0.9.7 libcripto.so
[root@dymatel lib]# ln -sf ../../lib/libcripto.so.0.9.7 libcripto.so.0
[root@dymatel lib]# ln -sf ../../lib/libssl.so.0.96 libssl.s0
[root@dymatel lib]# ln -sf ../../lib/libssl.so.0.96 libssl.s0.0
[root@dymatel lib]# mv /usr/share/ssl/man/man1/* /usr/share/man/man1/
[root@dymatel lib]# mv /usr/share/ssl/man/man3/* /usr/share/man/man3/
[root@dymatel lib]# mv /usr/share/ssl/man/man5/* /usr/share/man/man5/
[root@dymatel lib]# mv /usr/share/ssl/man/man7/* /usr/share/man/man7/
[root@dymatel lib]# rm -rf /usr/share/ssl/man/
[root@dymatel lib]# rm -rf /usr/share/ssl/lib/
[root@dymatel lib]# strip /usr/bin/openssl
[root@dymatel lib]# mkdir -p /usr/share/ssl/crl
[root@dymatel lib]# cd /var/tmp/openssl-0.9.7a/
[root@dymatel openssl-0.9.7a]# find /* > /root/openssl2
[root@dymatel openssl-0.9.7a]# diff /root/openssl1 /root/openssl2 > /root/ openssl.installed
[root@dymatel openssl-0.9.7a]# mv /root/openssl.installed /very_reliable_place/openssl.installed.YYYYMMDD

Шаг 7
Удалите архив и каталог с исходными кодами OpenSSL:
[root@dymatel /]# cd /var/tmp/
[root@dymatel tmp]# rm -rf openssl-0.9.7a /
[root@dymatel tmp]# rm -f opensal-0.9.7a.tar.gz

Конфигурирование OpenSSL

[Назад] [В этой главе] [Далее]

Конфигурирование OpenSSL осуществляется с использованием следующих файлов:
- главного конфигурационного файла /usr/shared/ssl/openssl.cnf;
- скрипта для самостоятельной подписи (без привлечения сертификационного центра подписи сертификата) /usr/shared/ssl/misc/sign.

Шаг 1
Отредактируйте в соответствии с приведенными ниже рекомендациями и вашими потребностями файл/usr/shared/ssl/openssl.cnf:

ЗАМЕЧАНИЕ В файле /usr/shared/ssl/openssl.cnf, созданном при установке OpenSSL, необходимо изменить параметры только в разделах [CA_default]и [req_distinguished_name].


OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
#
# This definition stops the following lines choking if HOME isn't
# defined.
HOME = .
RANDFILE = $ENV::HOME/.rnd

# Extra OBJECT IDENTIFIER info:
#oid_file = $ENV::HOME/.oid
oid_section = new_oids
# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions =
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

[ new_oids ]

# We can add new OIDs in here for use by 'ca' and 'req'.
# Add a simple OID like this:
# testoid1=1.2.3.4
# Or use config file substitution like this:
# testoid2=${testoid1}.5.6

####################################################################
[ ca ]
default_ca = CA_default # The default ca section

####################################################################
[ CA_default ]

dir = /usr/share/ssl # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/ca.db.index # database index file.
new_certs_dir = $dir/ca.db.certs # default place for new certs.

vcertificate = $dir/certs/ca.crt # The CA certificate
serial = $dir/ca.db.serial # The current serial number
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/ca.key # The private key
RANDFILE = $dir/ca.db.rand # private random number file

x509_extensions = usr_cert # The extentions to add to the cert

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crl_extensions = crl_ext

default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = md5 # which md to use.
preserve = no # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match

# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

# For the 'anything' policy
# At this point in time, you must list all acceptable 'object'
# types.
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

####################################################################
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
vattributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

# Passwords for private keys if not present they will be prompted for
# input_password = secret
# output_password = secret

# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
# so use this option with caution!
string_mask = nombstr

# req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
countryName_min = 2
countryName_max = 2

stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Moscow region

localityName = Locality Name (eg, city)
localityName_default = Ybileynyi

0.organizationName = Organization Name (eg, company)
0.organizationName_default = SIP RIA

# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd

organizationalUnitName = Organizational Unit Name (eg, section)

commonName = Common Name (eg, YOUR name)
commonName_default = www.dymatel.und
commonName_max = 64

emailAddress = Email Address
emailAddress_default = root@dymatel.und
emailAddress_max = 40

# SET-ex3 = SET extension number 3

[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 8
challengePassword_max = 20

unstructuredName = An optional company name

[ usr_cert ]

# These extensions are added when 'ca' signs a request.

# This goes against PKIX guidelines but some CAs do it and some software
# requires this to avoid interpreting an end user certificate as a CA.

basicConstraints=CA:FALSE

# Here are some examples of the usage of nsCertType. If it is omitted
# the certificate can be used for anything *except* object signing.

# This is OK for an SSL server.
# nsCertType = server

# For an object signing certificate this would be used.
# nsCertType = objsign

# For normal client use this is typical
# nsCertType = client, email

# and for everything including object signing:
# nsCertType = client, email, objsign

# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment

# This will be displayed in Netscape's comment listbox.
nsComment = "OpenSSL Generated Certificate"

# PKIX recommendations harmless if included in all certificates.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

# This stuff is for subjectAltName and issuerAltname.
# Import the email address.
# subjectAltName=email:copy

# Copy subject details
# issuerAltName=issuer:copy

#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]


# Extensions for a typical CA


# PKIX recommendation.

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer:always

# This is what PKIX recommends but some broken software chokes on critical
# extensions.
#basicConstraints = critical,CA:true
# So we do this instead.
basicConstraints = CA:true

# Key usage: this is typical for a CA certificate. However since it will
# prevent it being used as an test self-signed certificate it is best
# left out by default.
# keyUsage = cRLSign, keyCertSign

# Some might want this also
# nsCertType = sslCA, emailCA

# Include email address in subject alt name: another PKIX recommendation
# subjectAltName=email:copy
# Copy issuer details
# issuerAltName=issuer:copy

# DER hex encoding of an extension: beware experts only!
# obj=DER:02:03
# Where 'obj' is a standard or added object
# You can even override a supported extension:
# basicConstraints= critical, DER:30:03:01:01:FF

[ crl_ext ]

# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.

# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always

Шаг 2
Группа разработчиков OpenSSL предъявляет некоторые требования, затрудняющие использование файлов CA.pl или CA.sh для самостоятельной подписи ключей. Для подписи ключей авторы рекомендуют самостоятельно воспользоваться скриптом, разработанным Ральфом С. Энгелчолом (Ralf S. Engelschall). Создайте файл /usr/share/ssl/misc/sign следующего содержания:
#!/bin/sh
##
## sign.sh -- Sign a SSL Certificate Request (CSR)
## Copyright (c) 1998-1999 Ralf S. Engelschall, All Rights Reserved.
##

# argument line handling
CSR=$1
if [ $# -ne 1 ]; then
echo "Usage: sign.sign .csr"; exit 1
fi
if [ ! -f $CSR ]; then
echo "CSR not found: $CSR"; exit 1
fi
case $CSR in
*.csr ) CERT="`echo $CSR | sed -e 's/\.csr/.crt/'`" ;;
* ) CERT="$CSR.crt" ;;
esac

# make sure environment exists
if [ ! -d ca.db.certs ]; then
mkdir ca.db.certs
fi
if [ ! -f ca.db.serial ]; then
echo '01' >ca.db.serial
fi
if [ ! -f ca.db.index ]; then
cp /dev/null ca.db.index
fi

# create an own SSLeay config
cat >ca.config <[ ca ]
default_ca = CA_own
[ CA_own ]
dir = /usr/share/ssl
certs = /usr/share/ssl/certs
new_certs_dir = /usr/share/ssl/ca.db.certs
database = /usr/share/ssl/ca.db.index
serial = /usr/share/ssl/ca.db.serial
RANDFILE = /usr/share/ssl/ca.db.rand
certificate = /usr/share/ssl/certs/ca.crt
private_key = /usr/share/ssl/private/ca.key
default_days = 365
default_crl_days = 30
default_md = md5
preserve = no
policy = policy_anything
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
EOT

# sign the certificate
echo "CA signing: $CSR -> $CERT:"
openssl ca -config ca.config -out $CERT -infiles $CSR
echo "CA verifying: $CERT <-> CA cert"
openssl verify -CAfile /usr/share/ssl/certs/ca.crt $CERT
# cleanup after SSLeay
rm -f ca.config
rm -f ca.db.serial.old
rm -f ca.db.index.old

# die gracefully
exit 0

Шаг 3
Измените права доступа к файлу и назначьте владельцем файла суперпользователя root:
[root@dymatel /]# chmod 700 /usr/share/ssl/misc/sign
[root@dymatel /]# chown 0.0 /usr/share/ssl/misc/sign

Тестирование OpenSSL

[Назад] [В этой главе]

Для проверки работоспособности OpenSSL создайте на вашей системе SSL-сертификат Web-сервера Apache. Для создания ключей RSA и запросов на подтверждение подлинности сертификатов (Certificate Signing Requests, CSR) используется утилита /usr/bin/openssl.

Шаг 1
Выберите пять любых больших файлов со случайным (уникальным) содержанием, скопируйте их в каталог /usr/share/ssl и переименуйте в random1, random2, random3, random4, random5. Для выбора пяти случайных файлов и размещения их в /usr/share/ssl используйте команды:
[root@dymatel /]# cp /var/log/messages /usr/share/ssl/random1
[root@dymatel /]# cp /var/log/messages.1 /usr/share/ssl/random2
[root@dymatel /]# cp /var/log/messages.2 /usr/share/ssl/random3
[root@dymatel /]# cp /var/log/messages.3 /usr/share/ssl/random4
[root@dymatel /]# cp /var/log/messages.4 /usr/share/ssl/random5

Шаг 2
Создайте закрытый ключ RSA для Web-сервера, защищенный паролем:
[root@dymatel /]# cd /usr/share/ssl
[root@dymatel ssl]# openssl genrsa -des3 -rand
random1:random2:random3:random4:random5 -out www.dymatel.und.key 1024
1540748 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
........++++++
.................................................++++++
e is 65537 (0x10001)

Введите пароль для защиты вашего RSA-ключа:
Enter pass phrase for www.dymatel.und.key: $ecretn0e_Sl0vo

Подтвердите пароль:
Verifying - Enter pass phrase for www.dymatel.und.key: $ecretn0e_Sl0vo

ЗАМЕЧАНИЕ Обратите внимание, что в качестве имени системы нужно ввести www.dymatel.und, а не dymatel.und. В противном случае вы не сможете подписать сертификат.

Шаг 3
Сохраните ключ, содержащийся в файле www.dymatel.und.key, и защищающий его пароль в надежном месте, например, на дискете.

Шаг 4
Создайте запрос на подтверждение подлинности сертификата:
[root@dymatel ssl]# openssl req -new -key www.dymatel.und.key -out www.dymatel.und.csr

Введите пароль, защищающий ключ www.dymatel.und.key:
Enter pass phrase for www.dymatel.und.key: $ecretn0e_Sl0vo
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.

Подтвердите заданные ранее в файле /usr/shared/ssl/openssl.cnf название страны, области, города, организации, Web-сервера, почтового адреса администратора сервера:
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow Region]:
Locality Name (eg, sity) [Ybileynyi]:
Organization Name (eg, company) [SIP RIA]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) [www.dymatel.und]:
Email Address [root@dymatel.und]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Файл www.dymatel.und.csr, содержащий запрос на подтверждение подлинности сертификата, отправьте в коммерческий сертификационный центр, оплатите его услуги, и через некоторое время вы получите файл www.dymatel.und.crt, который вы сможете использовать для подтверждения подлинности сертификата. Если вы не желаете прибегать к услугам коммерческих сертификационных центров и желаете подписать его самостоятельно, то выполните операции, описанные в шагах 5, 6,7,8 и 9.

Шаг 5
Создайте закрытый RSA-ключ для своего собственного центра сертификации:
[root@dymatel ssl]# openssl genrsa -des3 -out ca.key 1024
Generating RSA private key, 1024 bit long modulus
............++++++
...............++++++
e is 65537 (0x10001)

Введите пароль, защищающий ключ:
Enter pass phrase for ca.key: $ecretnoe_Slov0
Подтвердите пароль:
Verifying - Enter pass phrase for ca.key: $ecretnoe_Slov0

Шаг 6
Сохраните ключ и защищающий его пароль в надежном месте, например на дискете.

Шаг 7
Создайте и подпишите для ключа ca.key сертификат:
[root@dymatel ssl]# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Enter pass phrase for ca.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.

Введите название страны, области, города, организации, Web-сервера, почтового адреса администратора сервера:
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow Region]:
Locality Name (eg, sity) [Ybileynyi]:
Organization Name (eg, company) [SIP RIA]:
Organizational Unit Name (eg, section) []: Sertification Department
Common Name (eg, YOUR name) [www.dymatel.und]:
Email Address [root@dymatel.und]:

ЗАМЕЧАНИЕ В этом примере были подтверждены все параметры, определенные в файле /usr/shared/ssl/openssl.cnf и использованные при создании www.dymatel.und.csr (шаг 4), кроме названия подразделения (Organizational Unit Name (eg, section)). Для реализации возможности самостоятельной подписи сертификата исходные данные, вводимые для www.dymatel.und.csr и ca.crt должны различаться, в противном случае при подписании сертификата произойдет ошибка.

Шаг 8
Поместите все созданные файлы в соответствующие каталоги:
[root@dymatel ssl]# mv www.dymatel.und.key private/
[root@dymatel ssl]# mv ca.key private/
[root@dymatel ssl]# mv ca.crt certs/

Шаг 9
Подпишите созданный ранее запрос на подтверждение подлинности сертификата www.dymatel.und.csr:
[root@dymatel ssl]# /usr/share/ssl/misc/sign www.dymatel.und.csr
CA signing: www.dymatel.und.csr -> www.dymatel.und.crt:
Using configuration from ca.config
Enter PEM pass phrase:
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Moscow region'
localityName :PRINTABLE:'Ybileyniy'
organizationName :PRINTABLE:'SIP RIA'
organizationalUnitName:PRINTABLE:'Sertification Department'
commonName :PRINTABLE:'www.dymatel.und'
emailAddress :IA5STRING:'root@dymatel.und'
Certificate is to be certified until Mar 19 12:24:10 2004 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
CA verifying: www.dymatel.und.crt <-> CA cert
www.dymatel.und.crt: OK

Шаг 10
Поместите файл www.dymatel.und.crt в /usr/share/ssl/cert:
[root@dymatel ssl]# mv www.dymatel.und.crt certs/

и удалите www.dymatel.und.csr:
[root@dymatel ssl]# rm -f www.dymatel.und.csr

ЗАМЕЧАНИЕ Если во время подписывания сертификата выдается сообщение об ошибках, вероятно, это является следствием того, что при вводе полного доменного имени системы вы ввели mydomain.ru вместо www.mydomain.ru или информация, введенная при создании ca.crt (шаг 7) и www.mydomain.ru.csr (шаг 4) идентична.

Шаг 11
Для повышения безопасности измените права доступа к вновь созданным файлам:
[root@dymatel /]# chmod 750 /usr/share/ssl/private/
[root@dymatel /]# chmod 400 /usr/share/ssl/certs/ca.crt
[root@dymatel /]# chmod 400 /usr/share/ssl/certs/www.dymatel.und.crt
[root@dymatel /]# chmod 400 /usr/share/ssl/private/ca.key
[root@dymatel /]# chmod 400 /usr/share/ssl/privafce/www.dymatel.und.key

Шаг 12
Для того, чтобы созданный и подписанный вами сертификат мог использоваться Web-сервером Apache, в конфигурационный файл httpd.conf добавьте строки:
SSLCertificateFile /usr/share/ssl/certs/www.dymatel.und.crt
SSLCertificateFile /usr/share/ssl/private/www.dymatel.und.key

В этом случае при обращении к вашему серверу по протоколу HTTPS сведения о вашем сертификате (при использовании самостоятельной подписи и браузера MS Internet Explorer 5.x) будут иметь вид, представленный на рис. 12.1.

Предупреждение системы безопасности Сведения о сертификате


























Рис. 12.1 Сведения о сертификате Web-сервера http://www.dymatel.und.

 
| Главная | Главы из книги | Конфигурационные файлы | Скачать |
(c) В. Бруй, С. Карлов, 2003-2005