openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout 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
/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;
$ openssl dgst -sha1 -sign cert.key -out sign.cr filename
Создаётся файл подписи длинной 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