Приватный ключ
Приватный ключ будет 1024-битным RSA-ключом (как вариант зашифрованным TripleDES). Обычно он хранится в визуально читаемом формате .pem. При генерации желательно задать случайную байтовую последовательность из нескольких случайных файлов, чтобы улучшить случайность ключа. В какой-то текущей рабочей папке делаем новый приватный ключ (параметры -des3 для TripleDES и -rand для указания файлов входных):
openssl genrsa -des3 -rand ./file1:./file2 -out myserver.key 49536 semi-random bytes loaded Generating RSA private key, 512 bit long modulus ......++++++++++++ .................................++++++++++++ e is 65537 (0x10001) Enter pass phrase for myserver.key: Verifying - Enter pass phrase for myserver.key:Как видно запрашивается пароль и подтверждение. Файл myserver.key - это и есть ключ. Учтите: если потеряете или сольёте пароль или сам ключ, то сертификатом пользоваться станет невозможно или бесполезно. Вот примерно как выглядит ключ:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,D3EFE25AEE9849F8 BiwT7mZeJP7/xNtBbE0sDhLOW1Qw7zWKVJyysHIdAqJGb03v6zcWQnL90bhtQFEd siK8+MJUMtbdzlpfwk5QYMgVxyvYyfvyqd67hb6VTHsQUvII8F4TcRmAM9kBK6nO l36IN5oRZtzAMCaLdcEDY5KLJXilyJlBECgmG7jHo9S8pzv2OxOK9MGIw4gV6foz ZxXmFDLnf2E7Y88GgsAvaeP8ytGBl1bvcams4I1GB6awAkSOF+6lgRmulWrWi3Or 9R7aDKsN7skpgBsBwMvgpvE6QuumEjzfQJ3qbW4HdAMrQQsKeHJM4S3fONTl0XhL cTlpbfaLl+Hjexz7WbAs8atIQx3lEfcWFmC0BCIlCf7Vb+RBp3snKaUoDn0h0YsY D6cPXZ2SaOx6pABVGkyM4n60A1xJjqgV+6wiBVVVsek= -----END RSA PRIVATE KEY-----Можно и без пароля, особенно для тестов (при использовании разные там проги типа apache будут просить его при старте). Ясно понятно, что без пароля надо ещё лучше его хранить. Для беспарольного ключа не нужно при создании ставить ключ -des3. Можно убрать из готового ключа пароль:
openssl rsa -in myserver.key -out myserver.key
-----BEGIN RSA PRIVATE KEY----- MIIBOwIBAAJBAMI9L+mz3HAUmwEH50aUf12Od99H6zb3bw0dMS9mvFEUNFfqotBY M+yZ4jHspSYrTR7LGahN9RaL46qT/pie0LsCAwEAAQJBALDYLItGamjRGd7yZyrn gJ6ZW6I6RHkjBkSWU3Wov8PAXmrLZRdGn54+O+89eRaB8tFqs+Q7xseo8ezT/mBE lQECIQDvM/is1DDIrfDKbTvMs3IHL8Pj/aRvcbKw4DnLwfQGoQIhAM/g69Ws4rnF zOZaikPG7DzOcukPzA4zkNIuFmV7PAXbAiBBYWoyCxl+cJSlL7Atpkqfjj2zvmtI jsIxuEfz2oKRoQIgZQt/ly2iR4rOPmpkKu3WhvgTAxaaqYyHKKMeX9W3J2ECIQCY +XTQ1/OpMLDVxzmaUXYEMPDtcO6hHpgaPaSbqR+JFA== -----END RSA PRIVATE KEY-----
Запрос на подпись сертификатов (CSR)
Запрос на подпись (CSR — Certificate Signing Request) генерируется из приватного ключа. Этот CSR нужен как для настоящего CA (Certification authority, Центр сертификации), типа VeriSign, так и для самостоятельной подписи CSR (см. ниже). Запускаем процесс, генерация CSR сопровождается разными вопросами.
$ openssl req -new -key myserver.key -out myserver.csr Enter pass phrase for myserver.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) [XX]:RU State or Province Name (full name) []:Ufa Locality Name (eg, city) [Default City]:Ufa Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:myserver.ru Email Address []:***@myserver.ru Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:Если используете для подписи на серверах и т.п., то важно(!), чтобы поле Common Name содержало полное имя домена. В итоге получится csr.
-----BEGIN CERTIFICATE REQUEST----- MIIBMDCB2wIBADB2MQswCQYDVQQGEwJSVTEMMAoGA1UECAwDVWZhMQwwCgYDVQQH DANVZmExHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQxEDAOBgNVBAMMB21l ZHYucnUxGzAZBgkqhkiG9w0BCQEWDGRpbWFAbWVkdi5ydTBcMA0GCSqGSIb3DQEB AQUAA0sAMEgCQQDCPS/ps9xwFJsBB+dGlH9djnffR+s2928NHTEvZrxRFDRX6qLQ WDPsmeIx7KUmK00eyxmoTfUWi+Oqk/6YntC7AgMBAAGgADANBgkqhkiG9w0BAQUF AANBADoJc0TMnwcTJIkFqoyvbPb8ie2uwRFILp3B/7P4oYyBiuWjSIVsJEonVJ78 2fqzGpWU9sE/+th6/+pN4e6sLA4= -----END CERTIFICATE REQUEST-----
Генерация самоподписанного сертификата
Этого достаточно, чтобы запросить настоящий сертификат. Но нам надо самоподписанный, так что эта замечательная программа может сама сделать сертификат из CSR. Ясно, что такой сертификат будет выдавать предупреждения в браузерах типа "CA неизвестен". Допустим, для сертификата на 90 дней сделать так:
openssl x509 -req -days 90 -in myserver.csr -signkey myserver.key -out myserver.crt
-----BEGIN CERTIFICATE----- MIIBgDCCASoCCQC0XjlK0HUrRjANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJS VTEMMAoGA1UECAwDVWZhMQwwCgYDVQQHDANVZmExHDAaBgNVBAoME0RlZmF1bHQg Q29tcGFueSBMdGQwHhcNMTEwNzI4MDcwODQ0WhcNMTEwOTI2MDcwODQ0WjBHMQsw CQYDVQQGEwJSVTEMMAoGA1UECAwDVWZhMQwwCgYDVQQHDANVZmExHDAaBgNVBAoM E0RlZmF1bHQgQ29tcGFueSBMdGQwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAx1jU GNLJZKQrXTZHC8royKX9TGHI5OO4sGNH10fSmJeFFMq3Gur+PwJgZxebp1Uqg9Ig sZf8KJBQ+hqSXM6wHwIDAQABMA0GCSqGSIb3DQEBBQUAA0EAsPc04WvpbtOFtZ5V 4Xs6p+p68v22W71WKoI6cO1v6XuQYR2BrkoGfb7Ov0P+VWxDHRVgDBWkt9FFS+0x v/tklQ== -----END CERTIFICATE-----
Использование сертификата
В итоге сертификат можно будет использовать в nginx, apache итд, подробностей писать незачем, есть соответствующие мануалы. В зависимости от ситуаций потребуются crt-файл, key-файл, пароль от ключа итд. Учтите, что если ключ шифрованый, то при перезагрузке сервера будет запрошен пароль. Про сертификаты, расширения файлов и т.п. вкратце пишут на википедии: http://en.wikipedia.org/wiki/X.509
Спасибо автору за познавательную статью)
ОтветитьУдалитьХочу заказать ssl сертификаты для своего нового сайта на http://uanic.name/ , поскольку ниже цен на ssl Thawte я не нашел. Но не могу определится какой именно SSL выбрать Thawte SSL 123 или Web Server Cert. Помогите пожалуйста выбрать SSL.