«Объект содержит только открытую половину пары ключей. Также должен быть предоставлен закрытый ключ». Использование 2 .pem & X509 & MS Services3.Security - PullRequest
1 голос
/ 19 мая 2011

Вот код:

using ADPTest.com.adp.hrbws;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Web.Services3.Security;
using Microsoft.Web.Services3.Security.Tokens;
using Microsoft.Web.Services3.Security.Cryptography;

namespace ADPTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create the web service proxy.
            HrbService proxy = new HrbService();

            // Add the Username token.
            UsernameToken usernameToken = new UsernameToken("user@ABC"," ");
            proxy.RequestSoapContext.Security.Tokens.Add(usernameToken);

            // Add the certificate for mutual SSL.
            X509Certificate2 mutualCert = new X509Certificate2 "I:\\auth.pem", " ");
            proxy.ClientCertificates.Add(mutualCert);

            // Sign the message using the signing certificate.
            X509Certificate2 signCert = new X509Certificate2("I:\\soap.pem", " ");
            X509SecurityToken signatureToken = new X509SecurityToken(signCert);
            MessageSignature signature = new MessageSignature(signatureToken);
            proxy.RequestSoapContext.Security.Elements.Add(signature);

Я думаю, что мой общий сертификат, в общем случае :versCert, SOAP - мой личный сертификат, а в действительности я не уверен. Я взял код из своего рода поваренной книги (веб-службы) ... Веб-служба сообщает, что они не смотрят пароли.

Сообщение об ошибке:

"Объект содержит только открытую половину пары ключей. Также должен быть предоставлен закрытый ключ."

1 Ответ

2 голосов
/ 03 августа 2011

Вам необходимо преобразовать файл .pem в .pfx, чтобы инфраструктура .Net могла использовать его..Pfx будет содержать как открытый, так и закрытый ключи.Вы можете использовать OpenSSL для преобразования файла .pem, который ADP отправил вам, в файл .pfx.

http://www.openssl.org/

alternCert - это сертификат SSL для подключения к ADP. SignCert используется для вызовов SOAP / веб-службы

Я работал над интерфейсом с ADP длянесколько месяцев, и у меня все еще есть проблемы.

Надеюсь, это поможет -Doug

...