Создание сертификата CA
bsd$ openssl req -nodes -new -newkey rsa:2048 -x509 -keyout ./ca.key -out ./ca.crt -config ./openssl-1.0.0.cnf -batch
Создание сертификата для сервера
bsd$ touch ./index.txt
bsd$ echo 01 | tee ./serial
bsd$ openssl req -new -newkey rsa:2048 -nodes -keyout ./server.key -out ./server.csr -config ./openssl-1.0.0.cnf -extensions server -batch
bsd$ openssl ca -out ./server.crt -in ./server.csr -config ./openssl-1.0.0.cnf -extensions server -batch
Создание сертификата для клиента
При подписании сертификата почему-то появлялась ошибка обновления базы данных, поэтому приходилось удалять все файлы вида./index.txt* и ./serial* и создавать их заново
bsd$ openssl req -new -newkey rsa:2048 -nodes -keyout ./client.key -out ./client.csr -config ./openssl-1.0.0.cnf -batch
bsd$ openssl ca -out ./client.crt -in ./client.csr -config ./openssl-1.0.0.cnf -batch
Листинг openssl-1.0.0.cnf (скачать)
# For use with easy-rsa version 2.0 and OpenSSL 1.0.0* | ||
[ ca ] | ||
default_ca | = CA_default | # The default ca section |
[ CA_default ] | ||
dir | = ./ | # Where everything is kept |
certs | = $dir | # Where the issued certs are kept |
crl_dir | = $dir | # Where the issued crl are kept |
database | = $dir/index.txt | # database index file. |
new_certs_dir | = $dir | # default place for new certs. |
certificate | = $dir/ca.crt | # The CA certificate |
serial | = $dir/serial | # The current serial number |
crl | = $dir/crl.pem | # The current CRL |
private_key | = $dir/ca.key | # The private key |
RANDFILE | = $dir/.rand | # private random number file |
x509_extensions | = usr_cert | # The extentions to add to the cert |
default_days | = 3650 | # how long to certify for |
default_crl_days | = 30 | # how long before next CRL |
default_md | = md5 | # use public key default MD |
preserve | = no | # keep passed DN ordering |
policy | = policy_anything | |
[ policy_anything ] | ||
countryName | = optional | |
stateOrProvinceName | = optional | |
localityName | = optional | |
organizationName | = optional | |
organizationalUnitName | = optional | |
commonName | = supplied | |
name | = optional | |
emailAddress | = optional | |
[ req ] | ||
default_bits | = 2048 | |
distinguished_name | = req_distinguished_name | |
basicConstraints | = CA:FALSE | |
keyUsage | = nonRepudiation, digitalSignature, keyEncipherment | |
string_mask | = nombstr | |
[ 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 | = province | |
localityName | = Locality Name (eg, city) | |
localityName_default | = city | |
0.organizationName | = Organization Name (eg, company) | |
0.organizationName_default | = org | |
organizationalUnitName | = Organizational Unit Name (eg, section) | |
organizationalUnitName_default | = ou | |
commonName | = Common Name (eg, your name or your server\'s hostname) | |
commonName_max | = 64 | |
commonName_default | = cn | |
name | = Name | |
name_max | = 64 | |
name_default | = name | |
emailAddress | = Email Address | |
emailAddress_default | = root@nowhere.com | |
emailAddress_max | = 40 | |
[ usr_cert ] | ||
basicConstraints | = CA:FALSE | |
subjectKeyIdentifier | = hash | |
authorityKeyIdentifier | = keyid,issuer:always | |
extendedKeyUsage | = clientAuth | |
keyUsage | = digitalSignature | |
[ server ] | ||
basicConstraints | = CA:FALSE | |
nsCertType | = server | |
subjectKeyIdentifier | = hash | |
authorityKeyIdentifier | = keyid,issuer:always | |
extendedKeyUsage | = serverAuth | |
keyUsage | = digitalSignature, keyEncipherment |
bsd$ less /usr/local/share/easy-rsa/pkitool
FreeBSD 10.0-RELEASE: Fri Dec 11 23:53:12 YEKT 2015