Если проект находится во внутренней сети и требуется SSL протокол, то, насколько я понял вполне можно обойтись сертификатами, сделанными самостоятельно. Браузеры, конечно, такой сертификат отвергнут напрочь, это и понятно. Тут и безопасность и бизнес. Но часть задач можно решить используя свой сертификат. Например, мне нужно было организовать безопасное соединение между HTTP клиентом и HTTP сервером для отправки POST запросов. Посмотрим как это делается сегодня.
Во многом мне помог в этом вопросе сайт Андрей Ренжиглова. Часть информации, я продублирую сюда, со ссылкой на сайт, а часть добавлю от себя.
Как создать свой SSL сертификат сроком на 3 года?
Скачиваем и устанавливаем OpenSSL для WIndows
Создаем файл openssl.cnf (создаем текстовый файл и меняем расширение)
Пример файла openssl.cnf с сайта Андрея
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[req] default_bits=1024 default_keyfile=privkey.pem distinguished_name=req_distinguished_name encrypt_rsa_key=no [req_distinguished_name] countryName=RU countryName_default=RU stateOrProvinceName=Rostov region localityName=Rostov upon Don localityName_default=Rostov upon Don organizationName=IVCZKZD organizationName_default=IVCSKZD organizationalUnitName=Payroll accounting commonName=Renzhiglov Nick emailAddress=Renzhiglov@ivc.skzd.mps |
Андрей все делал в той же папке, где и файл OpenSSL.exe,
1 |
C:\Program Files (x86)\GnuWin32\bin |
Я же просто создал на рабочем столе отдельную папку для генерации всех этих сертификатов и складывал их постепенно туда, вот что у меня получилось в итоге
Далее, при помощи CMD Windows (Win+X >Командная строка) создаем файлы при помощи следующих инструкций, предварительно поменяв директорию в CMD, следующим образом, иначе не будет работать.
1 |
C:\Windows\System32>cd C:\Program Files (x86)\GnuWin32\bin |
Создаем privkey.pem
>OPENSSL genrsa –out privkey.pem
//Если в своей папке, тогда так…
OPENSSL genrsa –out C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\privkey.pem
Создаем cert.pem
Если openssl.cnf лежит вместе с OpenSSL.exe
Теперь необходимо создать самоподписанный сертификат сроком действия, скажем, три года. В командной строке наберите
>OPENSSL req –new –x509 –key privkey.pem –out cert.pem –days 1095 –config openssl.cnf
Если в своей папке, тогда так
OPENSSL req –new –x509 –key C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\privkey.pem –out C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\cert.pem –days 1095 –config C:\Users\YellowFriend\Desktop\SSL-Certificates\mabanza\openssl.cnf
В этом месте он будет переспрашивать значения параметров, но если Вы ничего не собираетесь менять – просто жмите Enter несколько раз.
Создаем root.pem
Теперь в вашем распоряжении имеется два файла: privkey.pem и cert.pem. Третий файл root.pem, получите простым копированием cert.pem в root.pem.
Последний штрих
Переименуйте файл privkey.pem в key.pem
Если всё правильно сделали, у нас получится 3 необходимых нам файла
-cert.pem
-key.pem
root.pem
Полученные файлы лучше всего положить в папку с проектом, чтобы не зависеть от того – будут ли такие файлы или их предыдущие версии на компьютере другого человека, которому Вы будете устанавливать программу.
Другой вариант
Есть и другой способ – через IIS
Но тут вся проблема в том, что нам то нужны pem файлы, и да, мы можем конвертировать pfx в pem с помощью вот этого
openssl.exe pkcs12 –in <your file>.pfx –out <your file>.pem
Но что с этим делать далее – не совсем понятно. В книге Погружение в Indy Анатолия Подгорецкого есть такой момент
Если вы посмотрите созданный .pem файл с помощью блокнота, то вы увидите, что он разделен
на две части. Эти две части содержат приватный и публичный ключи. Также приведено
некоторое количество информации. Indy требует, что бы данная информация была помещена в
отдельные файлы.
Но вот посмотрел я и не увидел этого, у меня получилось так…
А в книге Анатолия Подгорецкого выходит так
18.4.4. Файл Key.pem
С помощью блокнота создайте файл key.pem и скопируйте все между двумя, ниже указанными
строками:
—–BEGIN RSA PRIVATE KEY—–
—–END RSA PRIVATE KEY—–
18.4.5. Файл Cert.pem
С помощью блокнота создайте файл cert.pem и скопируйте все между двумя, ниже указанными
строками:
—–BEGIN CERTIFICATE—–
—–END CERTIFICATE—–
В общем этот способ у меня не сработал, поэтому я привел первый способ.
Что дальше?
Для дальнейшей работы нужно положить полученные файлы в папку с проектом и собственно использовать SSL протокол. О том как это сделать – посмотрим в следующем посте.