Сертификат закрытого ключа не поддерживает цифровую подпись при загрузке через сертификат X509 - PullRequest
0 голосов
/ 11 ноября 2010

Недавно я столкнулся с необходимостью обмениваться сообщениями SOAP с веб-службой Java, где цифровая подпись сообщений является обязательной для связи. Процесс, как и ожидалось, заключается в подписывании сообщений закрытым ключом, чтобы противоположный сайт мог проверить его открытым, например, e.t.c. Единственное отличие на этот раз в том, что противоположным является сам Орган.

Я изначально создаю запрос сертификата, используя следующую команду

openssl req -new -newkey rsa:1024 -keyout myprivatekey.pem  -out myrequest.pem 

Приведенная выше команда создает закрытый ключ и запрос моего сертификата. После этого я отправляю им ( через их сайт ) запрос сертификата «myrequest.pem», чтобы они авторизовали сертификат и создали окончательный ( и действительный ). Когда я получаю свой ответ ( позволяет сказать, что авторизованный сертификат «complete.pem» ) вместе с ранее сгенерированным myprivatekey.pem я создаю закрытый ключ .pfx, который должен быть готов к немедленному использованию. *

openssl pkcs12 -export -out myprivatekey.pfx -in complete.pem -inkey myprivatekey.pem -name "testcertificate"

В приведенном выше примере создается myprivatekey.pfx, который я успешно проверяю по сертификату. Проблемы начинаются, когда я пытаюсь подписать свое сообщение через Studio 2005 и WSE 3.0 с помощью следующего кода:

X509Certificate2 cert = new X509Certificate2(path,"pass");
X509SecurityToken certToken = new X509SecurityToken(cert);

Свойство SupportsDigitalSignature certToken имеет значение false, поэтому я не могу подписывать свои сообщения и, следовательно, не могу продолжить. Обратите внимание, что та же процедура с самозаверяющим сертификатом и закрытым ключом, который я сам выдал и загрузил в X509SecurityToken, похоже, поддерживает цифровую подпись (свойство имеет значение true ).

Полагаю, что-то связано с окончательным авторизованным сертификатом, который я получил от них, но я начинаю подозревать, что я что-то делаю не так.

Есть идеи что проверить?

Ответы [ 3 ]

1 голос
/ 11 ноября 2010

Установите свой сертификат в хранилище сертификатов Windows (дважды щелкните файл PFX в проводнике). Затем перейдите в диалоговое окно «Настройки Интернета» в Internet Explorer и найдите кнопку «Сертификаты» на вкладке «Содержание». В открывшемся диалоговом окне найдите установленный сертификат и просмотрите его детали. Проверьте поле использования ключа. Он должен включать цифровую подпись (или аналогичные слова).

Обновление: как я уже упоминал в комментарии ниже, если это другая сторона, которая генерирует сертификат, вы можете спросить их, правильно ли их программное обеспечение устанавливает расширение использования ключа при обработке вашего запроса. Обычно задача CA - установить использование ключа, так как они дают вам право использовать этот сертификат для определенных целей.

0 голосов
/ 11 ноября 2010

Когда вы используете ключ -x509 для создания самозаверяющего сертификата, запрашиваются различные расширения по умолчанию. Проверьте файл конфигурации на наличие OpenSSL , особенно разделов req_extensions и x509_extensions.

0 голосов
/ 11 ноября 2010

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

openssl x509 -in complete.pem -purpose
...