Создание ключей и сертификатов

Материал из Wiki Open book
Перейти к: навигация, поиск
Внимание! Это не законченная статья, а только наброски. Т.е. очень сырой материал.

Тут будет рассмотрено как создавать свой собственный центр сертификации и самоподписанные сертификаты.

Содержание

Подготовительные действия

Найдите, где в вашем дистрибутиве располагается файл openssl.cnf. Обычно это директория /etc/ssl, /etc/pki/tls или /usr/share/ssl. Перейдите в нее.

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

[ server ]
basicConstraints=CA:FALSE
nsCertType                      = server
nsComment                       = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

[ client ]
basicConstraints=CA:FALSE
nsCertType                      = client
nsComment                       = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always

Первая секция описывает генерацию ключей для серверов, вторая для клиентов. Можно добавить отдельные секции для каждого типа сертификатов, которые вы собираетесь выписывать.

Поменяйте значение следующих переменных:

[ CA_default ]

dir             = ./                    # Рабочий каталог для базы данных 
                                        # клиентских ключей
certs           = $dir/certs            # Тут будут храниться выданные ключи
                                        # и сертификаты
crl_dir         = $dir                  # Where the issued crl are kept
database        = $dir/index.txt        # Индекс базы данных выписанных ключей
new_certs_dir   = $dir                  # Директория по умолчанию для сертификатов

certificate     = $dir/CA/ca.crt        # Корневой сертификат
serial          = $dir/serial           # Номер текущий серийный номер
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/CA/ca.key        # Закрытый ключ
RANDFILE        = $dir/CA/.rand         # private random number file

Создайте дополнительные файлы.

# touch index.txt
# echo 01 > serial

Если нет директории CA, её тоже необходимо создать.

Корневой сертификат

# openssl req -days 3650 -nodes -new -x509 \
-keyout CA/ca.key -out CA/ca.crt -config ./openssl.cnf

Generating a 1024 bit RSA private key
.......................++++++
..........................++++++
writing new private key to 'CA/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.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [kryukov.biz Home Limited]:
Organizational Unit Name (eg, section) [main server]:
Common Name (eg, your name or your server's hostname) []:kryukov.biz
artur@kryukov.biz []:
# 

Обязательно поменяйте права доступа к файлу ключа! Это очень секретная информация.

# chmod 0600 CA/ca.key
#

Файл сертиифката ca.crt желательно скопировать на все машины-клиенты, которые будут пользоваться сгенерированными вами сертификатами. И добавить его в список CA серверов сертификации.

Создание ключа и сертификата

Сначала сгенерируем запрос на подпись в центр сертификации. Обратите внимание на параметр -extensions server, он говорит, что будет использоваться секция server конфигурационного файла. Если вы хотите создать ключи для клиента, используйте параметр -extensions client (конечно, если такая секция присутствует в конфигурационном файле).

# openssl req -days 3650 -nodes -new -keyout certs/kryukov.biz.key \
-out certs/kryukov.biz.csr -extensions server -config ./openssl.cnf

Generating a 1024 bit RSA private key
..++++++
............++++++
writing new private key to 'certs/kryukov.biz.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.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Moscow]:
Locality Name (eg, city) [Moscow]:
Organization Name (eg, company) [kryukov.biz Home Limited]:
Organizational Unit Name (eg, section) [main server]:
Common Name (eg, your name or your server's hostname) []:kryukov.biz
artur@kryukov.biz []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:password
An optional company name []:
# 

Теперь сами подпишем сертификат:

# openssl ca -days 3650 -out certs/kryukov.biz.crt -in certs/kryukov.biz.csr \
-extensions server -config ./openssl.cnf

Using configuration from ./openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jan 20 12:39:44 2006 GMT
            Not After : Jan 18 12:39:44 2016 GMT
        Subject:
            countryName               = RU
            stateOrProvinceName       = Moscow
            organizationName          = kryukov.biz Home Limited
            organizationalUnitName    = main server
            commonName                = kryukov.biz
        X509v3 extensions:
            X509v3 Basic Constraints:
            CA:FALSE
            Netscape Cert Type:
            SSL Server
            Netscape Comment:
            OpenSSL Generated Server Certificate
            X509v3 Subject Key Identifier:
            39:16:CC:47:99:F4:47:7B:B9:3D:FC:3F:FF:B4:4C:3B:62:15:26:2D
            X509v3 Authority Key Identifier:
            keyid:9A:1B:09:62:98:E5:FB:EA:6F:10:61:53:4E:6D:66:67:93:B5:A5:DF
            DirName:/C=RU/ST=Moscow/L=Moscow/O=kryukov.biz Home Limited/OU=main server/CN=kryukov.biz
            serial:00

Certificate is to be certified until Jan 18 12:39:44 2016 GMT (3650 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
#

Закроем доступ к файлу ключа:

# chmod 0600 certs/kryukov.biz.key
#

Всё готово к конфигурации openvpn, sendmail и т.д.

Некоторые парамеры openssl

  • -req — запрос на создание нового сертификата.
  • -new — создание запроса на сертификат.
  • -newkey rsa:1024 — длина RSA-ключа сертификата.
  • -x509 — создание самоподписанного сертификата, а не CSR.
  • -days 3650 — срок действия сертификата. Значение должно быть больше срока действия создоваемого сертификата сервера и клиентов.
  • -nodes — флаг, указывающий не шифровать ключ.
  • -out ca.crt — сертификат.
  • -keyout ca.key — закрытый ключ сертификата.
  • -subj — данные сертификата:
    • C — код страны.
    • ST — название республики, региона, округа.
    • L — название города/деревни.
    • O — название организации.
    • OU — отдел организации.
    • CN — имя для сервера — Server Name, для клиентов — что угодно.
    • emailAddress — почтовый адрес администратора сервера.
Инструменты
    
Личные инструменты