сделать файлы CRT и KEY из PFX

Thank you for reading this post, don't forget to subscribe!

Сде­лать фай­лы CRT и KEY из PFX может потре­бо­вать­ся в том слу­чае, если вы исполь­зу­е­те какое-либо UNIX/Linux-при­ло­же­ние с под­держ­кой досту­па по SSL. Чаще все­го это веб-при­ло­же­ния. В про­ти­во­вес это­му под­хо­ду Windows исполь­зу­ет сер­ти­фи­ка­ты в фор­ма­те .pfx для хра­не­ния пары закры­тый-откры­тый клю­чи враз, разу­ме­ет­ся с защи­той паро­лем при попыт­ке экспорта.

SSL-сер­ти­фи­ка­ты на дан­ный момент рас­про­стра­не­ны повсе­мест­но и рабо­тать с ними при­хо­дит­ся постоянно.

Если у вас все ещё нет сер­ти­фи­ка­та от пуб­лич­но­го ЦС, тогда  для это­го сна­ча­ла нуж­но сде­лать CSR-запрос. Сле­ду­ю­щий шаг — отпра­вить его в ЦС и прой­ти про­вер­ку домена/организации (вам отпра­вят пись­мо с кодом под­твер­жде­ния на какой-либо админ­ский адрес, либо позво­нят на кор­по­ра­тив­ный номер теле­фо­на в зави­си­мо­сти от типа проверки).

Как толь­ко все фор­маль­но­сти прой­де­ны, на почту вы полу­чи­те архив с нуж­ным вам сер­ти­фи­ка­том в фор­ма­те .crt (и всей цепоч­кой про­ме­жу­точ­ных на вся­кий случай).

CRT и KEY из PFX

Вос­поль­зу­ем­ся всем зна­ко­мой ути­ли­той openssl, что­бы выта­щить откры­тую часть pfx-сертификата:

$ openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt

Нуж­но будет вве­сти пароль, кото­рый вы ука­зы­ва­ли при экс­пор­те .pfx-сер­ти­фи­ка­та. Теперь попро­бу­ем извлечь закры­тую часть сер­ти­фи­ка­та, поме­стив её в отдель­ный запа­ро­лен­ный файл:

$ openssl pkcs12 -in certificate.pfx -nocerts -out key-encrypted.key

После выпол­не­ния коман­ды вам при­дет­ся вве­сти не толь­ко пароль, кото­рый исполь­зо­вал­ся для экс­пор­та .pfx-сер­ти­фи­ка­та, но и новый пароль, необ­хо­ди­мый для защи­ты .key-фай­ла. Далее вы вполне може­те исполь­зо­вать все полу­чен­ные ранее фай­лы сер­ти­фи­ка­та для настрой­ки како­го-либо сер­ви­са, исполь­зу­ю­ще­го SSL (напри­мер Apache или Nginx).

Закры­тый ключ сер­ти­фи­ка­та с пароль­ной защи­той не все­гда удоб­но исполь­зо­вать на реаль­ном окру­же­нии. Напри­мер тот же Apache будет спра­ши­вать пароль при каж­дом рестар­те сер­ви­са, что будет тре­бо­вать чело­ве­че­ско­го уча­стия. Обой­ти про­бле­му мож­но, сняв пароль с закры­то­го ключа:

$ openssl rsa -in key-encrypted.key -out key-decrypted.key

Будь­те крайне осто­рож­ны в этом слу­чае, что­бы не допу­стить ком­про­ме­та­цию закры­то­го клю­ча. Уста­но­ви­те на файл соот­вет­ству­ю­щие пра­ва, что­бы никто кро­ме вас не имел к нему доступ:

$ chmod 600 key-decrypted.key

KEY и CRT в PFX

Ну а теперь рас­смот­рим обрат­ную процедуру

Сши­ва­ние двух фай­лов клю­чей — откры­то­го и закры­то­го — может потре­бо­вать­ся для сер­ви­сов на базе Windows, кото­рые при­вык­ли видеть сер­ти­фи­ка­ты в фор­ма­те .pfx. Так­же в неко­то­рых слу­ча­ях хра­нить пары клю­чей удоб­нее имен­но в фор­ма­те pfx.

При­ме­ча­ние: если вы гене­ри­ро­ва­ли csr-запрос на сто­роне сер­ве­ра Windows, то вам при­дет­ся его завер­шить, под­су­нув файл .crt, кото­рый вам поз­же при­шлет ваш ЦС. В ито­ге экс­пор­ти­ро­вать сер­ти­фи­кат из оснаст­ки MMC вы смо­же­те имен­но в фор­ма­те .pfx. Иной вари­ант — если csr созда­вал­ся с помо­щью ути­ли­ты openssl. В этом слу­чае веро­ят­но у вас уже будут crt и key, кото­рые потре­бу­ет­ся собрать в pfx.

Собрать crt и key в pfx мож­но командой:

$ openssl pkcs12 -inkey certificate.key -in certificate.crt -export -out certificate.pfx

Как толь­ко нажме­те Enter, нуж­но будет вве­сти пароль от фай­ла закры­то­го клю­ча (если этот пароль есть), а так­же пароль для экс­пор­та в pfx. После это­го сме­ло исполь­зуй­те файл на сер­ве­рах Windows, но не забудь­те при импор­те отме­тить ключ экс­пор­ти­ру­е­мым (ина­че экс­пор­ти­ро­вать ключ потом не получится).