2015-02-18 2 views
1

Я пытаюсь поговорить с веб-службой REST, для которой требуются сертификаты для совершения вызова. Я получил два файла от моего клиента - *.pem и файл *.key.Борьба с вызовом REST и сертификатами

Используя эти два файла, я могу сделать вызов на этот веб-службы в командной строке с помощью curl:

curl.exe -k -v "MyUrl" --cert mycert.pem --key mycertkey.key 

Это работает. Но я хотел бы использовать Fiddler и, в конечном счете, свой собственный код C#, чтобы сделать этот звонок, но как?

В Скрипач, я читаю о том, чтобы предоставить сертификат в качестве ClientCertificate.cer файла в определенном каталоге ..... но у меня есть .pem и .key файл - как те, «перевести» в *.cer файл?

И как я могу использовать эти *.pem и *.key файлы в моем C код # чтобы сделать вызов этой веб-службы (с помощью RestSharp или просто обычный WebRequest)?

Update: после ответа Дрю Burchett, я импортировал мой .pem файл в хранилище сертификатов на моей машине, а затем экспортировал его в .cer файл («DER-закодированные, двоичный») и поместил его в Фиддлерз папка. Когда attemping вызова службы REST, я все еще получаю эту ошибку от Скрипач:

[Fiddler] The connection to '......' failed.
System.Security.SecurityException Failed to negotiate HTTPS connection with server.fiddler.network.https; HTTPS handshake to (url) failed.
System.Security.Authentication.AuthenticationException Error with SSPI call, see internal exception; the format of the received message was unexpected or erroneous

достаточно смешной, последний абзац (Абзац System.Security.Authentication.AuthenticationException) появляется на немецком языке в моей системе, а остальное на английском языке. ... нечетным ......

Update # 2:
Попытка это в C# код, используя WebRequest с https:// префикс и сертификат, установленный в хранилище сертификатов (мои собственные сертификаты, доверенных корневых сертификатов) с ошибкой:

System.Net.WebException was caught
HResult=-2146233079
Message=The request was aborted: no secure SSL/TLS channel could be established.

Любые идеи?

ответ

1

Вы должны иметь возможность перевести файл .pem в файл .cer через диспетчер сертификатов. В Windows 7 нажмите «Пуск | Запустите и введите certmgr.msc. В Windows 8 щелкните правой кнопкой мыши кнопку «Пуск» и выберите «Выполнить». Введите certmgr.msc и нажмите OK. Если у вас есть сертификат менеджера разомкнут:

  1. Разверните папку Личные и щелкните на папке Сертификаты
  2. правой кнопкой мыши на папке Сертификаты (или личной папки, если сертификаты не существует) и нажмите кнопку Import.
  3. Просмотрите, где сохранен ваш .pem-файл, и выберите его.
  4. Выберите, чтобы импортировать сертификат в указанную папку.

Как только процесс импорта будет завершен, вы должны увидеть сертификат. Затем вы можете щелкнуть его правой кнопкой мыши и выбрать «Экспорт». Выберите файл .cer и укажите путь и имя файла, чтобы сохранить сертификат.

Если это сертификат, используемый для идентификации сервера, с которым вы подключаетесь (я подозреваю, что он есть), и это самозаверяющий сертификат, чтобы использовать его в коде C#, вам необходимо разместить его в папке доверенного корневого центра сертификации. Затем, когда вы вызываете службу с помощью WebRequest и префикса https, сертификат будет доверен, и вызов будет успешным. Вы можете использовать процедуру, описанную выше, чтобы импортировать сертификат в соответствующую папку или вы можете вставлять сертификат в папку вашего приложения «Root» с использованием метода найденную в Microsoft:

  1. Экспорт сервер серт в файл .der
  2. Включите сертификат в свое приложение (я поместил мой в каталог активов) Щелкните правой кнопкой мыши по сертификату после его включения в проект и a. установите действие «Сооружение» на контент b. установите Копировать в выходной каталог для копирования всегда
  3. Откройте package.appxmanifest в текстовом или XML-редакторе, щелкнув правой кнопкой мыши на нем и добавить сертификат в «Root»

    <Extensions> 
    <!--Certificates Extension--> 
    <Extension Category="windows.certificates"> 
        <Certificates> 
        <Certificate StoreName="Root" Content="Assets\jsanders4.cer" /> 
    
        </Certificates> 
    </Extension> 
    

+0

Спасибо, я выполнил ваши шаги, получил файл '.cer', сохранил его как' ClientCertificate.cer' в папке Fiddler - и ошибка все тот же .... [Fiddler] Соединение с '... ...' не смогли. System.Security.SecurityException Не удалось согласовать соединение HTTPS с server.fiddler.network.https; Подтверждение HTTPS на (url) не удалось. System.Security.Authentication.AuthenticationException Ошибка при вызове SSPI, см. Внутреннее исключение; формат полученного сообщения был неожиданным или ошибочным –

+0

Я не знаком с использованием Fiddler, но когда я загружал свои собственные службы WCF с сертификатами и получил ошибку SSPI, это почти всегда означало, что ключ RSA либо не был связан с свойства сертификата или не существует. Файл .cer не будет содержать ключ RSA, так что это может быть проблемой. Я попытался импортировать файл .pem в папку доверенного корневого центра сертификации и посмотреть, устраняет ли это проблему. –

+0

Я пробовал ваш отзыв - к сожалению, он ничего не меняет :-(Ошибка в Fiddler по-прежнему такая же .... –

 Смежные вопросы

  • Нет связанных вопросов^_^