Подтвердить что ты не робот

Присоединение сертификата 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. Хотя это может быть проблемой в некоторых случаях, это оказалось не главной причиной в моем случае.

Что может быть основной причиной этой проблемы и как ее устранить?

4b9b3361

Ответ 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.