Как перенести сертификат разработчика Safari (developer certificate) между компьютерами (для Windows)

Предупреждение: Данная статья является описанием личного опыта автора и не претендует на истину в первой инстанции. Возможно какие-то действия являются излишними... В любом случае это работает для меня и может быть будет полезно кому-то ещё.

Предистория: Те кто занимался разработкой расширений для броузера Safari помнят что для разработки необходим сертификат разработчика. Без него конструктор расширений не позволит вам работать. Изначально этот сертификат давался бесплатно, необходимо было только зарегистрироваться. Потом Apple решило срубить денег еще и с разработчиков и теперь это стоит 99$ в год. Мне какое-то время хватало старого сертификата. Срок кго давно истёк, но достаточно было отмотать назад системную дату (чтобы она попадала в срок действия сертификата)и можно было попрежнему создавать расширения. Но потом у меня умерла Windows на которой стоял этот сертификат. Попытка просто установить *.cer файл на новой Windows не принесла результата и пришлось более детально разбираться в этой теме. Результат описан в данной статье.

Получение сертификата: Напомню процес получения сертификата. На своем компьютере мы генерировали запрос на сертификат (*.pem файл). Для этого мы в командной строке выполняли следующую команду:
certreq -new C:\SafariCertificate\Certreq.txt C:\SafariCertificate\newcsr.pem
где
newcsr.pem - файл запроса на получение сертификата, получаемый в результате выполнения команды
Certreq.txt - входной inf файл, который утилита certreq использует для генерации запроса, примерно следующего содержания

[NewRequest]
Subject="cn=Safari Developer,o=User"
RequestType=pkcs10
KeyLength=2048
Exportable=TRUE
После получения файла newcsr.pem мы загружали его на сайт Apple. Там на его основе генерировался файл safari_extension.cer, который мы скачивали себе на компьютерам. Это файл сертификата разработчика. После уго установки мы получали возможность работать с конструктором расширений в Safari. Важна одна деталь, событие, которое происходило при генерации запроса на сертификат. Кроме файла newcsr.pem утилита Certreq генерировала еще и приватный ключ, который прятала где-то в недрах операционной системы. Именно эта пара - приватный ключ + сертификат - необходима для работы сертификата. Без приватного ключа перенос и установка только файла сертификата на другую машину ничего не дает. В итоге наша задача сводится к переносу не только файла сертификата, но и приватного ключа. Этим мы и займемся далее.

Менеджер сертификатов: Для вытаскивания приватного ключа из глубин Windows воспользуемся менеджером сертификатов (certmgr.msc). Запускаем certmgr.msc (Пуск->Выполнить или Win+R). В правой части окна менеджера сертификатов, в дереве находим узел "Запросы заявок на сертификат". В этом узле выбираем ветвь "Сертификаты" и видим ее содержимое в левой части окна менеджера сертификатов. Запросов может быть как один так и несколько. После каждого выполнения certreq появляется еще один запрос. Скорее всего запрос будет один, но их может быть и несколько. Выбираем нужный нам запрос. Если мы откроем этот запрос, то в окне запроса вы увидите "Есть закрытый ключ для этого сертификата". Нам необходимо выполнить экспорт этого сертификата вместе с закрытым ключом.


Для этого из контекстного меню для запроса выбираем "Все задачи > Экспорт"
В окне мастера экспорта выбираем "Да, экспортировать закрытый ключ".
В следующем окне "Формат экспортируемого файла" будет установлен формат "Файл обмена личной информацией - PKCS #12 (.PFX)".
В следующем окне вводим пароль которым будет защищен наш приватный ключ. Этот пароль понадобится нам в ходе дальнейших действий.
В следующем окне вводим имя экспортируемого файла и путь к этому файлу.
Жмем "Далее" и завершаем работу мастера.
После всех этих действий на выходе мы получаем ".pfx" файл (например my_safari_key.pfx). Для дальнейших действий нам будет необходим этот приватный ключ в формате RCA.

Конвертируем приватный ключ в RCA формат: Для следующего шага нам понадобится конвертировать наш приватный ключ в RCA формат. Для этого воспользуемся OPENSSL. Вы можете легко найти и скачать этот продукт в интернете. Он понадобится нам и для других действий. Установите OPENSSL (предположим в папку c:\openssl-win32\). В командной строке Windows выполняем ряд команд. Предположим что все наши файлы хранятся в папке c:\cert. (Напомню, чтобы не набирать команды руками вы можете скопировать их в буфер и в консоли вставить из контекстного меню - "Вставить").
Конфигурирует OPENSSL:

   Set OPENSSL_CONF=c:\openssl-win32\bin\openssl.cfg 
Вытаскивает приватный ключ из файла .pfx:
   openssl pkcs12 -in c:\cert\my_safari_key.pfx -nocerts -out c:\cert\my_safari_key.pem
my_safari_key.pfx - входной файл - файл который мы получили при экспорте сертификата из хранилища сертификатов.
my_safari_key.pem - выходной файл - файл с ключом.
Конвертируем приватный ключ в RCA формат:
   openssl rsa -in c:\cert\my_safari_key.pem -out c:\cert\my_safari_key.key
my_safari_key.pem - входной файл с ключом.
my_safari_key.key - выходной файл - файл с ключом в формате RCA.

Получаем приватный ключ в формате PKCS#12: Для переноса и установки на другом компьютере нам нужен наш приватный ключ в формате PKCS#12.<ик> Опять же воспользуемся OPENSSL чтобы выполнить конвертацию.

c:\OpenSSL\bin\openssl x509 -in c:\cert\safari_extension.cer -inform DER -out c:\cert\safari_extension_PEM.cer -outform PEM
c:\OpenSSL\bin\openssl pkcs12 -export -in c:\cert\safari_extension_PEM.cer -inkey c:\cert\privateKey.key -out c:\cert\bundle.p12

Перенос и установка сертификата на другой компьютер: Теперь, когда у нас есть .p12 файл, достаточно на другом компьютере послеловательно установить в хранилище сертификатов safari_extension.cer и key_bundle.p12. После этого открыв конструктор расширений в Safari, мы увидим что его вожможности доступны и на этом компьютере.
Удачного вам написания новых полезных расширений. Если самостоятельно сохдавать расширения нет желания, обращайтесь ко мне, автору статьи. Я имею большой опыт комерческой разработки разнообразных расширений для Safari.