Использование openssl

Формирование самоподписного сертификата

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.key
  • cert.pem — сертификат, содержащий открытый ключ и информацию о том, кому выдан
  • cert.key — закрытый ключ, предназначенный для создания подписей или расшифровки

Дальше отвечаем на несколько вопросов

Generating a 1024 bit RSA private key
........++++++
....++++++
writing new private key to 'cert.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Samara State
Locality Name (eg, city) []:Samara
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home
Organizational Unit Name (eg, section) []:Kitchen
Common Name (eg, YOUR name) []:Andrey Inutcin
Email Address []:inutcin@gmail.com

Чтобы не вводить эти параметры интерактивное можно использовать опцию -subj:

openssl req -new -x509 -days 9999 -nodes -subj /C=RU/O=My\ site/CN=my.site.com/emailAddress=admin@site.com -out cert.pem -keyout cert.key

Проверка(валидация) сертификата

$ openssl verify cert.pem

Как видно ниже из текста ошибки, это самоподписный сертификат

cert.pem: /C=RU/ST=Samara State/L=Samara/O=Home/OU=Kitchen/CN=Andrey Inutcin/emailAddress=inutcin@gmail.com
error 18 at 0 depth lookup:self signed certificate
OK

Для вывода подробной информации о сертификате поступим так

$ openssl x509 -in cert.pem -noout -text

В выводе и открытый ключ, и подпись сертификата и информация о владельце и сроки использования

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            98:11:41:86:23:df:91:b3
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=RU, ST=Samara State, L=Samara, O=Home, OU=Kitchen, CN=Andrey Inutcin/emailAddress=inutcin@gmail.com
        Validity
            Not Before: Jan 29 13:57:48 2011 GMT
            Not After : Jan 29 13:57:48 2012 GMT
        Subject: C=RU, ST=Samara State, L=Samara, O=Home, OU=Kitchen, CN=Andrey Inutcin/emailAddress=inutcin@gmail.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:b0:5a:f9:03:36:84:bb:8d:45:78:5c:6b:ac:c6:
                    9d:d9:87:08:21:1d:9e:7f:e0:ac:e4:69:c2:53:0b:
                    5f:8c:91:0e:2d:60:77:52:0b:bd:fd:a9:a6:58:6c:
                    39:90:e7:8f:19:b6:fc:0f:c0:1e:30:63:29:39:af:
                    c3:4d:9f:74:f8:bc:dc:c3:a8:97:74:ff:c1:52:e8:
                    e1:04:5a:5d:8b:cf:f6:1d:bf:be:d6:a9:59:37:4d:
                    86:bd:bb:a1:19:4a:7c:74:bf:5f:2d:ab:28:7d:3d:
                    0e:a5:bf:8a:26:8f:40:b7:7e:6d:4e:d4:a0:ba:e3:
                    47:90:32:70:56:7c:a6:85:37
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                5D:62:E9:7F:6E:53:36:35:7A:B5:6A:CB:C1:AB:7C:54:BF:AF:04:9B
            X509v3 Authority Key Identifier:
                keyid:5D:62:E9:7F:6E:53:36:35:7A:B5:6A:CB:C1:AB:7C:54:BF:AF:04:9B
                DirName:/C=RU/ST=Samara State/L=Samara/O=Home/OU=Kitchen/CN=Andrey Inutcin/emailAddress=inutcin@gmail.com
                serial:98:11:41:86:23:DF:91:B3

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
        af:f4:a9:c0:21:cd:ab:e2:55:fd:59:87:50:a9:0b:7f:7e:de:
        a9:09:eb:29:be:d8:9e:7f:0c:1a:23:b1:a6:6e:7a:45:3e:79:
        56:ad:67:74:a0:e0:9c:80:6a:cd:a4:6f:af:d5:f8:d1:11:1c:
        a4:b4:2a:50:62:aa:e2:ef:60:28:fc:45:04:6d:be:77:11:66:
        04:37:82:89:50:eb:2e:3b:1e:ec:ce:f7:a4:77:da:7a:61:e3:
        c8:28:da:5c:a9:62:e8:7a:ca:8d:01:12:e2:20:84:5f:a3:6c:
        f1:e9:e2:28:d7:0e:90:bf:dc:42:0a:f3:f4:ad:22:5d:29:c5:
        8d:e8

Настройка https

nginx

/etc/nginx/ssl.conf
# Подключение самоподписанного сертификата
# генерация сертификата:
# openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key

ssl			on;
ssl_protocols		SSLv3 TLSv1;
ssl_certificate		/etc/nginx/ssl/cert.pem;
ssl_certificate_key	/etc/nginx/ssl/cert.key;

Apache

FIXME

Создание электронной подписи файла

$ openssl dgst -sha1 -sign cert.key -out sign.cr filename
  • -sign cert.key — указываем закрытый ключ
  • filename — подписываемый файл
  • -out sign.cr — указываем файл, в который сохранится подпись
  • -sha1 — метод хэширования содержимого файла. Подписать можно лишь очень ограниченный объём информации, поэтому, как правило хэш-сумму файла. То есть сначала создаётся SHA1-хэш файла

Создаётся файл подписи длинной sign.cr 120 байт

Проверка электронной подписи файла

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

$ openssl x509 -pubkey -noout -in cert.pem > pubkey.pem

При использовании вместо публичного ключа сертификата мы получим сообщение unable to load key file, так что преобразование — операция обязательная.

Затем, с помощью этого ключа, произведём проверку подписи

$ openssl rsautl -verify -certin -inkey cert.pem -out filename.hash -in sign.cr

Если подпись верна, то получим

Verified OK

Если попытаемся изменить подписанный файл, то получим

Verification Failure

Cсылки по теме


Добавить комментарий