Создание сертификатов PKCS12

Материал из ALT Linux Wiki

Создание сертификатов PKCS12

Данная статья содержит краткое руководство для создания сертификатов PKCS12.

Такие сертификаты используются в качестве ключей на защищённых веб-страницах и в электронной подписи OpenOffice.org.

Основано на статье: Creating PKCS12 Certificates

Для того, чтобы создать сертификат, вам необходимо программное обеспечение openssl (если нет команды openssl, установите посредством команды apt-get install openssl).


Шаг 1. Подготавливаем место

Создайте каталог (например, cert) и перейдите в него. Выполните команды:

mkdir private
mkdir certs
echo '100001' >serial
touch certindex.txt

В этом каталоге создаём файл конфигурации openssl.conf следующего содержимого:

#
# OpenSSL configuration file.
#

# Establish working directory.
dir                                     = .

[ ca ]
default_ca                              = CA_default

[ CA_default ]
serial                                  = $dir/serial
database                                = $dir/certindex.txt
new_certs_dir                           = $dir/certs
certificate                             = $dir/cacert.pem
private_key                             = $dir/private/cakey.pem
default_days                            = 365
default_md                              = sha256
preserve                                = no
email_in_dn                             = yes # установите в no если не хотите чтобы поле email присутствовало в сертификате,
                                              # без поля email сертификат нельзя использовать для подписи и шифрования электронной почты!
nameopt                                 = default_ca
certopt                                 = default_ca
policy                                  = policy_match

[ policy_match ]
countryName                             = match
stateOrProvinceName                     = match
organizationName                        = match
organizationalUnitName                  = optional
commonName                              = supplied
emailAddress                            = optional

[ req ]
default_bits                            = 1024                  # Size of keys
default_keyfile                         = key.pem               # name of generated keys
default_md                              = sha256                   # message digest algorithm
string_mask                             = nombstr               # permitted characters
distinguished_name                      = req_distinguished_name
req_extensions                          = v3_req

[ req_distinguished_name ]
# Variable name                         Prompt string
#-------------------------        ----------------------------------
0.organizationName                      = Organization Name (company)
organizationalUnitName                  = Organizational Unit Name (department, division)
emailAddress                            = Email Address
emailAddress_max                        = 40
localityName                            = Locality Name (city, district)
stateOrProvinceName                     = State or Province Name (full name)
countryName                             = Country Name (2 letter code)
countryName_min                         = 2
countryName_max                         = 2
commonName                              = Common Name (hostname, IP, or your name)
commonName_max                          = 64

# Default values for the above, for consistency and less typing.
# Variable name                         Value
#------------------------         ------------------------------
0.organizationName_default              = Company
localityName_default                    = Moscow
stateOrProvinceName_default             = Moscow
countryName_default                     = RU
emailAddress_default					= email@domain.ru
commonName_default						= Common text

[ v3_ca ]
basicConstraints                        = CA:TRUE
subjectKeyIdentifier                    = hash
authorityKeyIdentifier                  = keyid:always,issuer:always

[ v3_req ]
basicConstraints                        = CA:FALSE
subjectKeyIdentifier                    = hash

Шаг 2. Создаём сертификат сертифицирующей организации (CA)

openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 365 -config ./openssl.conf

При запросе пароля указывайте пароль не менее 4 символов. На все остальные запросы можно нажать Enter.

Шаг 3. Создаём пользовательский сертификат

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

name='user1'

Теперь для каждого пользователя создаём сертификат PKCS12. Выполняйте по одной команде:

openssl req -new -nodes -out $name-req.pem -keyout private/$name-key.pem -days 365 -config ./openssl.conf
openssl ca -out $name-cert.pem -days 365 -config ./openssl.conf -infiles $name-req.pem
openssl pkcs12 -export -in $name-cert.pem -inkey private/$name-key.pem -certfile cacert.pem -name "description" -out $name-cert.p12

При запросе пароля указывайте пароль, заданный при создании сертификата CA. На все остальные запросы можно нажать Enter.

Готовый файл: user1-cert.p12

Этот файл можно импортировать в Firefox или Thunderbird, а потом использовать в OpenOffice.org.

См. также

cert-sh-functions

Используемая литература