Присоединение сертификата SSL.crt с закрытым ключом для использования с привязкой WCF Net.Tcp
У меня есть сертификат SSL, выданный GoDaddy, в формате .crt
. Также у меня есть предыдущий сертификат с истекшим сроком действия в формате .pfx
, который включает закрытый ключ.
Теперь я столкнулся с проблемой присоединения исходного секретного ключа с выданным сертификатом для формирования файла .pfx
, подходящего для установки в хранилище сертификатов Windows.
Я выполнил шаги, которые я успешно использовал в аналогичной ситуации для создания сертификата подписи кода (зарегистрированного в этой Q/A-паре на SO). Полученный сертификат работает для HTTPS, , но не для конечных точек WCF Net.Tcp. Когда такая конечная точка используется, она не может инициализироваться из-за следующей ошибки:
ArgumentException: Вероятно, сертификат "CN = domain.com, O =" Компания ", L = Abc, S = Abc, C = XY 'может не иметь закрытого ключа, способного к обмену ключами или процессу могут не иметь прав доступа для закрытого ключа. Подробнее см. Внутреннее исключение.
Некоторые источники утверждают, что вместо domain.com
необходимо использовать www.domain.com
. Хотя это может быть проблемой в некоторых случаях, это оказалось не главной причиной в моем случае.
Что может быть основной причиной этой проблемы и как ее устранить?
Ответы
Ответ 1
Проблема заключается в том, что сертификат, созданный с помощью .spc
в качестве промежуточного формата, как результат следующих шагов в этом ответе, приводит к потере KeyExchange
.
Правильный способ присоединиться к .crt
с закрытым ключом - использовать закрытый ключ в формате .pem
, например:
- Получите новый сертификат
Ssl.crt
от GoDaddy.
-
Экспорт закрытого ключа в формате PEM из истекшего PFX:
openssl.exe pkcs12 -in ExpiredSslCert.pfx -nocerts -out SslPrivateKey.pem
-
Объедините CRT и PEM в PFX:
openssl.exe pkcs12 -export -in SslCert.crt -inkey SslPrivateKey.pem -out FullCert.pfx
В результате .pfx
теперь имеет флаг KeyExchange
и работает для привязок WCF Net.Tcp.