понедельник, 9 июля 2012 г.

Ключи с помощью OpenSSL, OpenSSL CA


Этап 0:

Мне не удалось насладиться openssl без правленного конфигурационного файла.
А именно:
####################################################################
[ ca ]
default_ca = CA_default # The default ca section


####################################################################
[ CA_default ]


dir = ./demoCA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = F:/OmniPlat/SSLkeys/ca_internal/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = F:/OmniPlat/SSLkeys/ca_internal # default place for new certs.


certificate = F:/OmniPlat/SSLkeys/ca_public/omniplat_ca.cer # The CA certificate
serial = F:/OmniPlat/SSLkeys/ca_internal/serial # The current serial number
crlnumber = F:/OmniPlat/SSLkeys/ca_internal/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = F:/OmniPlat/SSLkeys/ca_private/omniplat_ca.key # The private key
RANDFILE = $dir/private/.rand # private random number file


Этап 1:

@rem ## Выпустим собственный CA сертификат, 


@rem ### для этого, получим private-ключ для нашего CA сертификата. Это можно сделать выполнив команду:
C:\openssl\bin\openssl genrsa -out ca_private/omniplat_ca00.key 1024
attrib +R ca_private/omniplat_ca00.key


@rem ### После чего, создадим CA сертификат, выполнив команду:
C:\openssl\bin\openssl req -new -x509 -days 365 -key ca_private/omniplat_ca00.key -out ca_public/omniplat_ca00.cer -subj "/C=RU/ST=Russia/L=Moscow/O=OmniPlat/OU=OmniPlat CA/CN=OmniPlat CA Root"


@rem ### Сделаем экспорт в PKCS12, упаковав приватный ключ и сам CA сертификат:
C:\openssl\bin\openssl pkcs12 -export -in ca_public/Superplat_ca00.cer -inkey ca_private/Superplat_ca00.key -passout pass:654321 -out ca_private/Superplat_ca00.p12


@rem ### Здесь же создадим список отозванных сертификатов для CA сертификата:
C:\openssl\bin\openssl ca -gencrl -out ca_public/Superplat_ca00.crl

Этап 2:

set TermNum=0000000
set CertName=SuperTerm%TermNum%


@rem ###########################################################################################################################################
@rem ### 4. Наш CA сертификат готов, теперь мы можем приступить к выпуску дочернего SSL сертификата, для этого сделаем запрос на SSL сертификат:
C:\openssl\bin\openssl.exe req -new -newkey rsa:1024 -keyout client_private/%CertName%.key -nodes -out client_public/ToCA_%CertName%.csr -subj "/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=SuperPlat Terminals/CN=%CertName%"


@rem ### 5. Подтвердим запрос на сертификат нашим CA сертификатом (подпишим серификат нашим CA сертификатом):
@rem ##openssl ca -policy policy_any -config openssl.conf -in csr/%CertName%.csr -days 360 -out cer/test.cer
@rem # C:\openssl\bin\openssl ca -policy policy_any -in csr/test.csr -days 360 -out cer/test.cer
@rem # C:\openssl\bin\openssl ca -policy policy_any -keyfile c:\iis\ca.key -cert c:\iis\ca.crt -in csr/test.csr -days 360 -out cer/test.cer
C:\openssl\bin\openssl ca -policy policy_anything -keyfile ca_private/Superplat_ca.key -cert ca_public/Superplat_ca.cer -in client_public/ToCA_%CertName%.csr -days 360 -out client_public/FromCA_%CertName%.cer


@rem ### Сделаем экспорт в PKCS12 полученного SSL сертификата:
@rem ##openssl pkcs12 -export -out p12/test.p12 -in cer/test.cer -inkey key/test.key
C:\openssl\bin\openssl pkcs12 -export -passout pass:654321 -out client_private/%CertName%.p12 -in client_public/FromCA_%CertName%.cer -inkey client_private/%CertName%.key

Этап 3:

Просто кликаем на файлах
...\client_public\FromCA_SuperTerm0000000.cer 
...\client_private\SuperTerm0000000.p12 

Этап 4:

start Certmgr
или
start mmc


Обратите внимание на расширения:

*.key

Текстовый файл

-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDJG2mmxGKxttH5xSpbCGbDfE1np4rSIlG22j5ukoP/Bmhs8g1T
...
2WJwCTUKJ6x7xexS7ubulQ0YjiBRLVu7YpbHc5yabONC+OY=
-----END RSA PRIVATE KEY-----
Это собственно приватный ключ -- он секретен и его нужно хранить под семью замками.
Файл не содержит описание ключа.
Как следствие каждый сгенеренный сертификат к приватному ключу может иметь свое собственное описание ключа.

*.cer (иногда называются *.pem, еще реже *.crt, еще реже *.der)

Текстовый файл. Содержит публичный ключ+описание ключа.
Посмотреть на него можно 
c:\openssl\bin\openssl x509 -in <имя файла>.cer -noout -text > 1

Как не странно, принято называть "публичный сертификат" не зависимо от того, реально ли "сертифицирован" удостоверяющим центром или нет.
Если же подтвержден, то расширение остается прежним.

Если смотреть в http://en.wikipedia.org/wiki/X.509, то все наоборот
  • .pem - (Privacy Enhanced MailBase64 encoded DER certificate, enclosed between "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----"
  • .cer.crt.der - usually in binary DER form, but Base64-encoded certificates are common too (see .pem above)




Пример публичного сертификата

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            f7:2b:ac:56:b3:64:b2:d4
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Validity
            Not Before: Jul  4 10:51:59 2012 GMT
            Not After : Jul  4 10:51:59 2013 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:c9:1b:69:a6:c4:62:b1:b6:d1:f9:c5:2a:5b:08:
                    66:c3:7c:4d:67:a7:8a:d2:22:51:b6:da:3e:6e:92:
                    83:ff:06:68:6c:f2:0d:53:80:f7:1c:37:fb:56:72:
                    38:f3:e1:ee:da:9f:97:9c:42:d0:43:db:a4:8f:55:
                    9e:24:48:73:24:3b:ec:96:5c:b4:b1:31:7c:a9:ff:
                    69:42:e1:3e:c7:33:75:2a:9d:45:b2:17:24:1d:35:
                    56:b3:69:e0:ea:c1:ca:cf:d7:50:de:88:fa:e0:0b:
                    e2:df:ff:d0:30:8f:6f:e3:fc:4e:a3:d7:01:c2:c0:
                    1a:68:35:b6:1c:f2:18:4c:8d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41
            X509v3 Authority Key Identifier: 
                keyid:89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41
                DirName:/C=RU/ST=Russia/L=Moscow/O=SuperPlat/OU=CA/CN=SuperPlat CA
                serial:F7:2B:AC:56:B3:64:B2:D4

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
        75:64:af:ad:53:8f:58:79:ae:60:47:e4:64:8c:cc:82:00:6b:
        76:00:c1:fc:6e:7f:dc:f0:89:13:d1:47:16:67:17:5e:f8:c4:
        29:86:10:4c:69:38:38:c4:42:24:c4:be:72:8e:62:e5:e2:89:
        b0:5c:66:4b:23:fd:32:07:43:d4:60:e1:95:13:3f:31:65:67:
        74:4a:01:12:bb:45:b7:cc:65:38:2d:06:89:07:82:1e:34:de:
        f2:f7:59:a1:35:13:4c:5b:ba:cd:52:c5:be:74:a9:98:b4:63:
        1d:31:cb:d7:13:ff:23:ad:a4:74:34:0c:cc:5b:74:16:b8:ff:
        f6:64

Пример публичного сертификата, который был удостоверен удостоверящим центром

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 4 (0x4)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=CA, CN=SuperPlat CA
        Validity
            Not Before: Jul  4 11:11:04 2012 GMT
            Not After : Jun 29 11:11:04 2013 GMT
        Subject: C=RU, ST=Russia, L=Moscow, O=SuperPlat, OU=SuperPlat Terminals, CN=SuperTerm0000000
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:b9:14:fa:dd:58:99:ec:87:4c:7e:55:14:df:da:
                    79:f5:45:d0:fd:a2:27:98:72:86:04:26:10:71:c4:
                    32:bc:4f:80:8b:24:02:e7:8a:eb:5c:ea:4a:2e:c6:
                    eb:a0:2e:dd:62:5e:b8:0c:42:b4:08:b7:c9:4e:a4:
                    15:ca:66:3d:2b:7b:47:88:26:fb:99:70:a3:98:c3:
                    7c:6f:28:00:ec:f2:15:6e:1e:cb:bf:2c:89:73:e7:
                    82:28:e6:ae:6e:c4:4a:29:d4:f3:5d:43:58:f6:f0:
                    b9:a9:27:a9:3d:d5:bc:31:79:db:fd:bf:0b:ea:b9:
                    8f:37:ca:31:c7:8b:08:1d:1f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                1F:C6:C4:C2:86:67:B4:90:0F:79:E0:BD:6F:E2:95:C6:4D:04:6B:7F
            X509v3 Authority Key Identifier: 
                keyid:89:62:A4:9A:CD:78:A9:C5:BF:27:F7:33:C5:13:D4:21:5D:0A:A9:41

    Signature Algorithm: sha1WithRSAEncryption
        01:7e:64:92:e4:dd:d1:b9:57:0b:dc:72:86:f3:41:eb:18:db:
        28:cc:96:1d:e5:75:37:51:f6:db:a5:f7:4d:c4:ae:18:b3:68:
        b7:6a:dc:1b:82:ef:81:2e:f8:31:fb:55:8c:41:d4:58:98:62:
        f1:05:cc:41:98:56:fa:98:f9:84:c9:7d:f7:cc:19:00:5b:47:
        ad:be:b1:09:23:4f:e8:31:90:aa:31:ad:e7:83:0d:e9:7e:c3:
        4e:15:33:f6:c4:62:7c:b1:f7:e0:d7:dc:02:59:34:ca:17:4d:
        54:97:66:ea:f2:fd:c0:6b:10:2b:33:71:91:2b:91:ef:b0:fc:
        a1:bc


*.p12 (в Windows может иметь расширение *.pfx)

Бинарный файл - контейнер
Предназначен для хранения как приватных, так и публичных ключей/сертификатов.
Как правило содержит приватный ключ (*.key) и публичный сертификат (*.cer)

*.crl 

Текстовый файл. Содержит запрос к удостверящему центру CA (фактически публичный ключ+описание ключа).
-----BEGIN X509 CRL-----
MIIBPTCBpwIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJSVTEPMA0GA1UE
...
pYdKWJ6m76GqkHOfASM2FJTPFkXgGptqt8PEGm14SDs3
-----END X509 CRL-----





См. также:
http://www.handcode.ru/2010/03/openssl.html
http://citforum.ru/security/cryptography/openssl/
http://www.opennet.ru/openforum/vsluhforumID10/1487.html
http://en.wikipedia.org/wiki/X.509

Комментариев нет:

Отправить комментарий