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