Криптография - статьи

       

Инсталляция центра сертификации


Для создания центра будем использовать адаптированный набор скриптов, написанных Ralf S. Engelschall.

Загрузите архив по ссылке http://slil.ru/25110674.

#tar -xjf CA_clean.tar.bz2 #cd CA_clean #export CAHOME=`pwd` #echo ${CAHOME}

Отредактируйте файл ca.conf под свои нужды:

[req] distinguished_name =req_distinguished_name x509_extensions = v3_ca prompt = no [req_distinguished_name] C= UA ST = UA L = Kiev O = GPAHARENKO-UA OU = ROOTCA CN = ca.gpaharenko.com.ua emailAddress = gpaharenko@gpaharenko.ua [v3_ca] basicConstraints = CA:true nsComment = "CA certificate of GPAHARENKO" nsCertType = sslCA, emailCA subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always

В скрипте createca.sh срок жизни сертификата равен 10 лет, вы можете изменить его в соответствии с вашей политикой. В этом же файле устанавливается длина ключа сертификата.

Генерируем корневой сертификат:

#./createca.sh Generating RSA private key, 4096 bit long modulus ...++ .................................................................................++ e is 65537 (0x10001) Enter pass phrase for ca.key: Verifying - Enter pass phrase for ca.key: Enter pass phrase for ca.key: #

Один и тот же пароль необходимо ввести 3 раза. Создаются файлы ca.key - закрытый ключ сертификата, ca.crt - корневой сертификат, ca.pfx - для некоторых приложений может понадобиться сертификат в таком формате.

#openssl x509 -text -in ca.crt |head -15 Certificate: Data: Version: 3 (0x2) Serial Number: b5:b5:a9:0e:3d:ed:fb:24 Signature Algorithm: sha1WithRSAEncryption Issuer: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Validity Not Before: Oct 31 13:57:31 2007 GMT Not After : Oct 28 13:57:31 2017 GMT Subject: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit):

#openssl rsa -text -in ca.key |head -5 Enter pass phrase for ca.key: writing RSA key Private-Key: (4096 bit) modulus: 00:c2:3c:f1:e6:56:b6:a6:87:4c:99:56:3f:03:df: 81:04:5b:b3:4a:40:3e:93:71:62:80:e9:3b:01:00: 21:33:91:3c:3f:6a:79:9e:81:97:8b:f4:3a:f0:b4:


#openssl x509 -text -in ca.pfx -inform der |head -15 Certificate: Data: Version: 3 (0x2) Serial Number: b5:b5:a9:0e:3d:ed:fb: 24 Signature Algorithm: sha1WithRSAEncryption Issuer: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Validity Not Before: Oct 31 13:57:31 2007 GMT Not After : Oct 28 13:57:31 2017 GMT Subject: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (4096 bit) Modulus (4096 bit):



Уточняем срок действия списка отозваных сертификатов в carevoke.config: #cat carevoke.config |grep default_crl default_crl_days = 365

Создаем пустой пока еще revocation list:

#./createcrl.sh Using configuration from carevoke.config Enter pass phrase for ./ca.key: #ls crl.pem crl.pem #openssl crl -text -in crl.pem |head -10 Certificate Revocation List (CRL): Version 1 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=UA/ST=UA/L=Kiev/O=GPAHARENKO-UA/OU=ROOTCA/CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Last Update: Oct 31 14:03:21 2007 GMT Next Update: Oct 30 14:03:21 2008 GMT No Revoked Certificates. Signature Algorithm: sha1WithRSAEncryption #

Далее создавать серверные и клиентские сертификаты можно по следующей схеме. Создается пустая папка. В ней файл openssl.conf с шаблоном сертификата:

#cat SERVERS/sales/openssl.conf [ req ] default_bits = 1024 distinguished_name = req_distinguished_name prompt = no req_extensions = v3_req

[ req_distinguished_name ] C = UA ST = UA L = Kiev O = GPAHARENKO-UA OU = SALES CN = sales.gpaharenko.com.ua emailAddress = gpaharenko@gpaharenko.com.ua

[ v3_req ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash

Если сертификат клиентский, необходимо также указать пароль для закрытых ключей сертфиката в файле pass. По умолчанию в pkcs12 они шифруются DES3. Создадим серверный сертификат:

#./createserver.sh SERVERS/sales/ Generating RSA private key, 1024 bit long modulus .....++++++ ...++++++ e is 65537 (0x10001) writing RSA key CA signing: SERVERS/sales//server.csr -> SERVERS/sales//server.crt: Using configuration from ca.config Enter pass phrase for ./ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'UA' stateOrProvinceName :PRINTABLE:'UA' localityName :PRINTABLE:'Kiev' organizationName :PRINTABLE:'GPAHARENKO-UA' organizationalUnitName:PRINTABLE:'SALES' commonName :PRINTABLE:'sales.gpaharenko.ua' emailAddress :IA5STRING:'gpaharenko@gpaharenko.ua' Certificate is to be certified until Oct 29 14:27:03 2012 GMT (1825 days)



Write out database with 1 new entries Data Base Updated CA verifying: SERVERS/sales//server.crt CA cert SERVERS/sales//server.crt: OK

Серверный сертификат server.crt:

#openssl x509 -text -in SERVERS/sales/server.crt |head -15 Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=ROOTCA, CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Validity Not Before: Oct 31 14:27:03 2007 GMT Not After : Oct 29 14:27:03 2012 GMT Subject: C=UA, ST=UA, L=Kiev, O=GPAHARENKO-UA, OU=SALES, CN=sales.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c6:19:04:81:59:7d:12:b5:fe:f5:6a:cc:13:5b: #

Закрытый ключ серверного сертификта server.key:

#openssl rsa -text -in SERVERS/sales/server.key |head -5 writing RSA key Private-Key: (1024 bit) modulus: 00:c6:19:04:81:59:7d:12:b5:fe:f5:6a:cc:13:5b: 18:ed:30:b0:1f:81:a3:5f:fa:40:8f:47:3f:ff:84: 1a:36:ac:c4:02:88:e5:ce:79:f0:e2:26:e8:86:1e:

После этого можно подготовить архив со всеми необходимыми файлами и передать их системному администратору сервера:

#./bundleserver.sh SERVERS/sales/ #tar -tzf SERVERS/sales/deploy.tar.gz SERVERS/sales//server.crt SERVERS/sales//server.key ca.crt crl.pem #

Аналогично создается клиентский сертификат. Главное не забыть указать пароль, которым будет зашифрован сертификат.

#echo "gpaharenko" > SERVERS/sales/gleb/pass #./createclient.sh SERVERS/sales/gleb/ Generating a 512 bit RSA private key ......++++++++++++ ...................................++++++++++++ writing new private key to 'SERVERS/sales/gleb//client.key' ----- CA signing: SERVERS/sales/gleb//client.csr -> SERVERS/sales/gleb//client.crt: Using configuration from ca.config Enter pass phrase for ./ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'UA' stateOrProvinceName :PRINTABLE:'UA' localityName :PRINTABLE:'Kiev' organizationName :PRINTABLE:'GPAHARENKO-UA' organizationalUnitName:PRINTABLE:'SALES' commonName :PRINTABLE:'gpakharenko' emailAddress :IA5STRING:'gpaharenko@gpaharenko.ua' Certificate is to be certified until Oct 30 14:34:08 2008 GMT (365 days)



Write out database with 1 new entries Data Base Updated CA verifying: SERVERS/sales/gleb//client.crt CA cert SERVERS/sales/gleb//client.crt: OK

Кроме файлов .crt и .key создается файл pkcs12, который, в основном, используется клиентскими программами.

#openssl pkcs12 -info -in SERVERS/sales/gleb/client.p12 Enter Import Password: MAC Iteration 2048 MAC verified OK PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048 Certificate bag Bag Attributes localKeyID: 47 F2 5A 86 BB 3B BF DB BD 5C DA 87 D4 3F 27 59 67 A5 16 B8 friendlyName: my_client_certificate subject=/C=UA/ST=UA/L=Kiev/O=GPAHARENKO-UA/OU=SALES/CN=gpakharenko/emailAddress= gpaharenko@gpaharenko.ua issuer=/C=UA/ST=UA/L=Kiev/O=GPAHARENKO-UA/OU=ROOTCA/CN=ca.gpaharenko.ua/emailAdd ress=gpaharenko@gpaharenko.ua

Упаковуем клиентский сертификат:

#./bundleclient.sh SERVERS/sales/gleb/ #tar -tzf SERVERS/sales/gleb/deploy.tar.gz SERVERS/sales/gleb//client.p12 ca.crt crl.pem #

Одной из важных задач управления жизненым циклом является отзыв сертификата. Выполняется он с помощью скрипта revoke.sh

#./createclient.sh SERVERS/sales/blocked/ Generating a 512 bit RSA private key ...++++++++++++ ............++++++++++++ writing new private key to 'SERVERS/sales/blocked//client.key' ----- CA signing: SERVERS/sales/blocked//client.csr -> SERVERS/sales/blocked//client.crt: Using configuration from ca.config Enter pass phrase for ./ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'UA' stateOrProvinceName :PRINTABLE:'UA' localityName :PRINTABLE:'Kiev' organizationName :PRINTABLE:'GPAHARENKO-UA' organizationalUnitName:PRINTABLE:'SALES' commonName :PRINTABLE:'blocked' emailAddress :IA5STRING:'gpaharenko@gpaharenko.ua' Certificate is to be certified until Oct 31 09:50:04 2008 GMT (365 days)

Write out database with 1 new entries Data Base Updated CA verifying: SERVERS/sales/blocked//client.crt CA cert SERVERS/sales/blocked//client.crt: OK #./revoke.sh SERVERS/sales/blocked/client.crt Using configuration from carevoke.config Enter pass phrase for ./ca.key: Revoking Certificate 03. Data Base Updated Using configuration from carevoke.config Enter pass phrase for ./ca.key: #

Можем убедиться, что в обновленном файле crl.pem содержится сертификат с номером 3:

#openssl crl -text -in crl.pem | head -8 Certificate Revocation List (CRL): Version 1 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=UA/ST=UA/L=Kiev/O=GPAHARENKO-UA/OU=ROOTCA/CN=ca.gpaharenko.ua/emailAddress=gpaharenko@gpaharenko.ua Last Update: Nov 1 09:50:26 2007 GMT Next Update: Oct 31 09:50:26 2008 GMT Revoked Certificates: Serial Number: 03 # #openssl x509 -text -in SERVERS/sales/blocked/client.crt | head -4 Certificate: Data: Version: 1 (0x0) Serial Number: 3 (0x3)

#


Содержание раздела