Найти, скачать и установить подходящий OpenSSL, начинать искать можно отсюда.
Если при старте OpenSSL в консоли есть ошибка «Can't open config file /usr/local/ssl/openssl.cnf» необходимо создать системную переменную, например в cmd.exe так: set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg.
Подменить дефолтный openssl.cnf на приложенный openssl.cfg.
#
# OpenSSL configuration based on sample configuration shipped
# with OpenVPN.
#
#############################################################
# modify according to your needs
KEY_SIZE = 2048
KEY_COUNTRY = DE
KEY_PROVINCE = NO
KEY_CITY = NOWHERE
KEY_ORG = EXAMPLE.COM
KEY_ORGUNIT = IT-DIVISION
KEY_EMAIL = root@server.example.com
HOME = /root
KEY_DIR = $ENV::HOME/certs
RANDFILE = $ENV::HOME/.rnd
#############################################################
openssl_conf = openssl_init
[ openssl_init ]
oid_section = new_oids
engines = engine_section
[ new_oids ]
[ engine_section ]
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = $ENV::KEY_DIR
certs = $dir
crl_dir = $dir
database = $dir/index.txt
new_certs_dir = $dir
certificate = $dir/ca.crt
serial = $dir/serial
crl = $dir/crl.pem
private_key = $dir/ca.key
RANDFILE = $dir/.rand
x509_extensions = usr_cert
default_days = 3650
default_crl_days = 30
# IMPORTANT: The next must no longer be md5, if used with
# Debian's OpenLDAP package being compiled against libgnutls.
default_md = sha1
preserve = no
policy = policy_match
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = $ENV::KEY_SIZE
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
req_extensions = v3_req
string_mask = nombstr
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = $ENV::KEY_COUNTRY
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = $ENV::KEY_PROVINCE
localityName = Locality Name (eg, city)
localityName_default = $ENV::KEY_CITY
0.organizationName = Organization Name (eg, company)
0.organizationName_default = $ENV::KEY_ORG
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = $ENV::KEY_ORGUNIT
commonName = Common Name (eg, your name or your server\'s hostname)
commonName_max = 64
emailAddress = Email Address
emailAddress_default = $ENV::KEY_EMAIL
emailAddress_max = 40
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ usr_cert ]
basicConstraints = CA:FALSE
nsComment = "OpenSSL Generated Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
extendedKeyUsage = clientAuth
keyUsage = digitalSignature
[ server ]
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, keyEncipherment
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true
keyUsage = digitalSignature
[ crl_ext ]
authorityKeyIdentifier = keyid:always,issuer:always
Ключевым местом для возможности подписывания документов в этом конфиге является строчка keyUsage = digitalSignature.
Связь сертификата с закрытым ключом
Необходимость связать сертификат с закрытым ключом возникает, например, при появлении сообщении об ошибке Cannot find the certificate and private key for decryption. (0x8009200B) в частности в браузерном плагине Crypto-Pro.
Цепочка создания закрытого ключа, запроса на подпись сертификата, сертификата и .p12-файла будет такой:
Для начала надо убедиться, что в openssl.cfg, в секции [ req ] добавлена строка req_extensions = v3_req, а в секции [ v3_req ] есть нужное нам расширение keyUsage = digitalSignature.
Спасибо за статью. Правда, еще можно немного добавить команд по генерации csr,key и crt в разных ситуациях (на лету без вопросом, с готовым ключом, с ключом без пароля, и тп.), как пишут здесь — sysadm.pp.ua/internet/pou...x-ssl-setup.html
еще тут можно сгенерировать сертификат www.cryptopro.ru/certsrv/certrqma.asp
Спасибо за статью. Правда, еще можно немного добавить команд по генерации csr,key и crt в разных ситуациях (на лету без вопросом, с готовым ключом, с ключом без пароля, и тп.), как пишут здесь — sysadm.pp.ua/internet/pou...x-ssl-setup.html