Создание сертификата 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