Всем привет, пытаюсь уже пару дней решить нерешаемое :) Есть api, на который ходит POST request c авторизацией сертификатом:

 

var userConnection = Get<UserConnection>("UserConnection");
 
// переменная для сохранения тестового результат
string httpResponseData = ""; 
 
//тащим из системной настройки с типом "бинарные данные" содержимое сертификата
byte[] _certByte = (byte[])Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, "UsrIpsmsCertificate"); 
 
//из него реконструируем сертификат
X509Certificate2 _certificate = new X509Certificate2(_certByte);
 
// создаем тело POST запроса
IpSMS _ipSMS = new IpSMS();
_ipSMS.action = "ping";
_ipSMS.baID = "populo";
string output = JsonConvert.SerializeObject(_ipSMS);
 
//инициализируем uri
string uri = "https://www.xxxxxxxxxxxxxxxxxxxxxxxxxxxx";
 
//определяем протоколы ServicePointManager, не контролируем валидность сертификата
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
	| SecurityProtocolType.Tls11
	| SecurityProtocolType.Tls12
	| SecurityProtocolType.Ssl3;
	ServicePointManager.Expect100Continue = true;
	ServicePointManager.ServerCertificateValidationCallback +=
		(sender, cert, chain, error) => true;
 
//выполняем request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "text/json";
httpWebRequest.ClientCertificates.Add(_certificate);
try {
	using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) {
		streamWriter.Write(output);
	}
	var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
	using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) {
		httpResponseData += streamReader.ReadToEnd().ToString();
	}
} catch (Exception ex) {
	httpResponseData += ex.InnerException == null ? ex.Message : ex.InnerException.Message;
}
 
//как-то выводим httpResponseData 

Результат:

The request was aborted: Could not create SSL/TLS secure channel.

 

на сервере-приемнике:

] AH02261: Re-negotiation handshake failed

 

вот честно скажу, с сертификатами опыта мало, но чисто визуально все ок. И в чем тогда косяк?! 

 

Нравится

1 комментарий

Дмитрий, добрый день!

Очень похоже на то, что вы используете Apache и его нужно обновить. Рекомендую ознакомится с этим обсуждением.

Показать все комментарии

Внешний web.config

1.    

   - удалить провайдеры SsoAuthProvider, SSPSsoAuthProvider

   

2.     

    - заменить https на http

       

    - заменить https на http

    

3.

    

         

     

   


   - удалить секцию ?use_sso=true

   

4.

    

   


   - установить use_sso=false

   - установить requireSSL="false

5.  

    - удалить атрибут requireSSL

    

Внутренний web.config

1.

    - установить value=false

2.

    - изменить значение на false

3.

    - Удалить атрибут requireSSL

    

4.

    - Изменить https на http

5. После того, как вы «вошли в систему», т.е. после логина – перейдите в конфигурацию по Url: http://[сайт]/[приложение]/dev

6. Cкомпилировать всю конфигурацию.

Нравится

Поделиться

0 комментариев
Показать все комментарии

Здравствуйте!

Возникли проблемы с настройкой порта 443 в IIS7.
Создал и привязал к приложению самоподписанный сертификат, следуя этой инструкции.

Подключиться к приложению удается только лишь из IIS, по нажатии "Обзор: 443(https)"

Подключение через браузер (GC, IE) самостоятельно не удаётся как на самом сервере, так и по сети.

В чем может быть проблема?

Заранее спасибо.

Нравится

18 комментариев

Здравствуйте.
Попробуйте настроить сертификат для конкретного браузера, в частности Chrome. Наберите в Google запрос "настройка сертификата для chrome" и перейдите по первой ссылке.

Александр, спасибо, но не думаю, что это поможет. ИЕ ведь тоже не грузит сайт.

Есть ли другие сайты на IIS, кроме BPMonline by Resco? Какой обозреватель открывается при "Подключиться к приложению удается только лишь из IIS"? Открывается ли сайт?

На IIS только BPMonline CRM, для которого мы и пытаемся настроить защищенный порт. Для того, чтобы к системе был доступ с портативных устройств с установленным А Mobile CRM by Resco...

Я где-то не прав?

Открывается по умолчанию ИЕ.

Очень нужна помощь по данному вопросу! Прошу кого-нибудь откликнуться.

Здравствуйте.
Предоставьте, пожалуйста, файлы конфигурации IIS: administration.config, applicationHost.config, путь по умолчанию: C:\Windows\System32\inetsrv\config.
Также стоит проверить блокировку порта брэндмауэром.

Отключение брандмауэра не помогло.
Файлы прикладываю1.rar

Судя по конфигурационным файлам IIS настроено вроде бы правильно. Можете ли Вы предоставить параметры удалённого доступа к машине, где у Вас развёрнут IIS? Если "да", тогда отправьте их на поддержку (support@terrasoft.ru) указав в теме письма номер обращения - 0139442.

Можно по Ammyy Admin

В режиме удалённого доступа вопрос решили. Нужно было в линке в начале указать "https", порт 443 указывать можно, но не обязательно.

Попробовали подключиться через Android - выдаёт ошибку 401 - не авторизован. Пароль/логин вводим правильно.

В чем может быть проблема?

А лицензия на Mobile есть?

"Зверев Александр" написал:

А лицензия на Mobile есть?

Да, конечно.

Здравствуйте.
Прошу Вас отправить на support@terrasoft.ru линк и параметры учётной записи для проверки, а также источник, с которого Вы получили мобильное приложение.

"Котенко Александр" написал:

Здравствуйте.

Прошу Вас отправить на support@terrasoft.ru линк и параметры учётной записи для проверки, а также источник, с которого Вы получили мобильное приложение.

С уважением, Котенко Александр.

Спасибо, отправил.

Здравствуйте.
Работа с BPMonline by Resco возможна начиная с версии 5.4.0.383 и продукт должен быть BPMonline CRM. У Вас же версия 5.4.0.317. Свяжитесь, пожалуйста, с менеджером, который ответственный по Вашей компании для обсуждения обновления.

Александр, большое спасибо.

А как проходит процесс обновления?

Показать все комментарии

С чего начинается интернет. Конечно же Apache, наверное это единственный "живой" веб-сервер, который появился на заре развития интернета, и который продолжает жить и здравствовать. Ну, собственно, это была полемика, а мы перейдем к практике.

Итак, обзаводимся инструментами

  1. Собственно, сам сервер Apache. Идем на сайт http://httpd.apache.org/download.cgi. Поддерживаемые версии на сегодня это 2.0.X и 2.2.X (да-да, 2.2 ветка уже тоже поддерживается). Внимание!!!: хотим SSL? Конечно. И не забываем, что нам надо взять соответствующий установочный пакет "Win32 Binary including OpenSSL 0.9.8m (MSI Installer)".
  2. Ваш любимый блокнот, где придется немного подредактировать конфигурационные файлы Apache.
  3. Хотим SSL? Конечно же, безопасность превыше всего. Тогда идем на http://www.slproweb.com/products/Win32OpenSSL.html (официальный сайт библиотек OpenSSL для Windows). И скачиваем оттуда версию "Win32 OpenSSL v1.0.0a Light" (для тех, кто в 64-битном танке, там есть версия "Win64 OpenSSL v1.0.0a Light"). И не в коем случае не берите полную версию - она абсолютно не нужна.
    Да, чуть не забыл. Вы абсолютно не должны смущаться, по поводу разных версий OpenSSL в установочном пакете Apache и в поставке Win32 OpenSSL Light.
  4. Ну и естественно, нужен пациент. То есть Terrasoft версии 3.3.2, веб-сервисы которого мы и будем подключать к Apache 2.X.X.

Краткое отступление. Когда писалась данная заметка, я тестировал все нижеописанное в следующей конфигурации: Windows Server 2008 32-bit, Apache 2.2.15 32-bit with SSL, IIS 7.0 (по умолчанию, я установил все расширения), Terrasoft XRM 3.3.2.107. Соответственно, все мои изыскания были проведены для данных версий. Но, скажу честно и откровенно, должны заработать и в других комбинациях.

Установка Apache.

Все до ужаса просто. Кликаем всегда далее и вот у нас стоит Apache, и он даже запустился. Так, только прежде чем ставить Apache, давайте посмотрим вокруг себя и попытаемся найти того, кто (или что) нам обязательно будет мешать. Вот некоторые кандидаты, замеченные Вашим покорным слугой.

Кандидат №1 - это конечно же уже установленный и запущенный Apache (другой версии). Если он Вам нужен - Вы и так уже знаете как его ставить, а если не нужен - удаляйте :smile:, удаляйте :lol: - мы же все равно ставим новый.:twisted:

Кандидат №2 - это IIS. А-я-я-й. Мы же Apache ставим - зачем нам IIS. Поэтому необходимо удалить IIS с компьютера, чтобы он Вам не мешал и "не портил всю картину".
Как его удалять - ну это уже задание на дом - для изучения всяких-таких руководств от Microsoft.

Кандидат №3 - Skype. Ага, а что ему делать на сервере? Ну если он все-таки там нашелся, необходимо в его настройках отключить использование 80 и 443 портов (а он, редиска, использует их по умолчанию - зачем, это уже другая песня).

Итак, смотрим на скриншоты и вперед. В основном, установка идет со значениями по умолчанию.
Шаг №1

Шаг №2

Шаг №3

Шаг №4. Обратите внимание на значение в поле ServerName. Если Вы не будете использовать виртуальный хостинг, то здесь должно быть прописан полный адрес вашего сервера.
Также, по умолчанию, ставим Apache как службу системы с автоматическим запуском и прослушиванием порта 80.

Шаг №5

Шаг №6

Шаг №7

Проверить работоспособность можно, если перейти по адресу http://127.0.0.1/ или по адресу http://имя_Вашего_сервера>/. Если Вы увидите след. картинку, то можно считать, что Apache установлен, запущен и работает нормально.

Установка Terrasoft XRM

Здесь я даже останавливаться не буду. Это итак разложено по полочкам в "Руководстве администратора". Единственный момент (а оказывается многие забывают) - это надо настроить путь к папке Settings в файле RunSettings.xml
К примеру, после установки Terrasoft XRM со значениями по умолчанию, путь к папке Settings будет C:\Program Files\Terrasoft\Settings\.

После этого, необходимо запустить TSClient.exe и настроить подключение к конфигурации.

Настройка Web-сервисов под Apache

Итак, Apache есть, Terrasoft XRM установлен. Самое время подключить web-сервисы. Открываем в любимом редакторе файл httpd.conf, который находиться в папке conf корневой папки установки Apache (если ставили по умолчанию, то это будет C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf) и в конец файла добавляем следующие строки (для Apache 2.2.x)

LoadModule tsapache_module \
     "С:\Program Files\Terrasoft\Bin\TSWebServicesServerLibraryApache22.dll"
/TSWebServices>
        SetHandler TSWebServicesServerLibraryApache22-handler
>

Для Apache 2.0.x, строки будут следующие

LoadModule tsapache_module \
     "С:\Program Files\Terrasoft\Bin\TSWebServicesServerLibraryApache20.dll"
/TSWebServices>
        SetHandler TSWebServicesServerLibraryApache20-handler
>

Название виртуальной директории (в данном примере TSWebServices) Вы можете придумать самостоятельно так, как Вам нравится.

Чтобы изменения вступили в силу, необходимо произвести перезапуск Apache сервера. Если по быстрому, то в трее у Вас должен быть значок Apache Monitor , кликнув по которому откроется окно программы, в котором можно сделать перезапуск (остановку/запуск) сервера Apache. Если перезапуск прошел успешно, значит модуль веб-сервисов загрузился успешно. Можно проверить работоспособность, если перейти по адресу http://127.0.0.1/TSWebServices/ (где вместо 127.0.0.1 может быть записан полный адрес сервера, а TSWebServices - это название виртуальной папки, которое Вы указали в httpd.conf). Вы должны увидеть следующую картинку

Увидели - вуаля. Web-сервисы под Apache запущенны и работают. Далее необходимо настроить клиент Terrasoft, но останавливаться на этом не буду, так как в руководстве данный материал полностью раскрыт и освещен.

Настройка SSL.

Вот собственно мы и добрались до самого главного. То есть до безучастности. Конечно, многие могут возразить, зачем, мол, веб-сервисы да еще и через SSL - не проще ли поднять VPN или заходить на удаленный рабочий стол.
Да, неверное многие так и делают, но дискуссии на тему что лучше мы оставим другим, а сейчас просто займемся настройкой SSL под Apache.

Но сначала немного теории. Итак, для того чтобы обзавестись защищенным каналом, необходимо наличие сертификатов. А здесь начинаются сплошные непонятные слова и действия. (Да, можно и бубен прикупить, с надписями SSL). Но мы сейчас быстро разложим все по полочкам.

Собственно, сертификат - это заверенный удостоверяющим центром электронный (или печатный, что очень редко) документ, подтверждающий принадлежность владельцу открытого ключа или каких-либо атрибутов. А теперь, чтобы не надо было ломать мозги, представим себе, что сертификат - это какой либо документ (например копия Вашего паспорта) содержащий Ваши данные и это все заверено государственным нотариусом. Ведь ни у кого не будет сомнений, что это копия действительно Вашего паспорта, а не дяди Васи со стороны. То есть, удостоверяющий центр - это такая организация, которой все доверяют. Довольно известные компании Thawte, VeriSign очень давно работают в этом сегменте, что позволяет им довольно интенсивно влиять на многие аспекты сертификации в целом.

Для нас же с Вами, сертификат - это некий файл в формате X.509 (может быть текстовым, а может и не быть :-)) который содержит информацию про Вас, и информацию про того, кто сертификат "заверил". Понятие "заверил" не зря взято в кавычки - это значит что в Вашем сертификате стоит электронная цифровая подпись той компании, которая подтвердила правдивость Ваших данных. Собственно, как мокрая печать нотариуса на документах.

Также существуют корневые сертификаты (CA). Корневой сертификат - это сертификат, который заверен сам собой. Напрашивается вопрос - зачем сертификат который заверен своей же организацией. А вот ответ на самом деле очень простой. Если каждый сертификат должен быть кем-то заверен (далее по тексу буду использовать выражение "подписан", так как в мире сертификатов оно больее полно раскрывает смысл), то где-то должно быть начало этой цепочки. Так вот, начало этой цепочки - это и есть корневой сертификат.

Кроме всего этого, существуют публичные списки корневых сертификатов. Это списки тех сертификатов, которые либо включены в операционную систему либо встроенны в приложение (например, браузер Mozilla Firefox). Используя эти публичные сертификаты (CA) приложение может проверить "на действительность и правильность" любой сертификат. В случае с браузерами - мы видим "позеленевшую" адресную строку, когда заходим на любой сайт HTTPS.

Итак, было немного теории, теперь перейдем к практике.

Для начала подготовим инструменты - это минимальный набор файлов: openssl.exe, libeay32.dll, ssleay32.dll и главное - openssl.cfg. Можно забрать архивом прикрепленных файлах. Распаковываем. Конечно, туда, куда Вам больше нравится.

Теперь вкратце о том, что необходимо сделать. Так как мы будем генерировать (создавать) все сами - (денег нет, не дают, нет необходимости покупать у гигантов CA) - то нам необходимо будет сгенерировать два сертификата. Первый - это RootCA - то есть наш корневой сертификат, который мы сами же и подпишем. Второй - это сертификат сервера, на котором будут работать вебсервер.

Чтобы долго не расписывать что, как и почем, в архиве есть файл gen.cmd (для любознательных - можете заглянуть внутрь). Запускаем и идем по шагам.

Итак, какие данные у вас спросит скрипт.


Код страны - двухбуквенное обозначение, вводить необходимо в верхнем регистре.


Название компании. Обязательно латиницей. На данный момент пробелы в названии не поддерживаются (хотя для любопытных - можете попробовать).


Название сервера - это должно быть полное FQDN имя домена, для которого будет сгенерирован сертификат. Обычно - это полное название компютера, на котором установлен Apache2 (или IIS). Если это не так - ну тогда Вам прямая дорога к вашему системному администратору (если это не Вы) - он должен быть в курсе.

Введенные данные будут записаны в файл info.txt.



Пароли - первый для приватного ключа от CA, второй - для приватного ключа сервера. Минимум - 4 символа. (Сохранены будут с файлах с расширением .pwd)

После этого будут сгенерированны ключи и сертификаты. При создании экспортных версий (для MS) - будут запрошены пароли экспорта - эти пароли будут запрошены при импорте сертификатов в MS.

Да, если у Вас что-то пошло не так, там есть простенький файл clean.cmd - который удалит все сгенерированные и промежуточные данные. (Внимание, приватные ключи тоже будут удалены).

Продолжение следует...

Нравится

Поделиться

6 комментариев

Супер, Миша, СПАСИБО!

Мне понравился стиль аффтара. +5

Зачмечательный пост.+1.
К слову о Skype на сервере. Его не обязательно удалять, главное не запускать до старта самого веб-сервера, а потом можно, скайп смотрит не занят ли 80й порт и если занят, то пользует другой (какой не помню).

У многих, кто пытается протестировать веб-сервисы с Apache'м на локальной машине Skype либо уже запущен, либо в автостарте. По крайней мере, если Apache не заработает - это один из вариантов, почему он не работает.

Отмечу особый изящный стиль изложения, ну и конечно высокий уровень подготовки материала. Ты сэкономил многие часы работы нашим коллегам и Клиентам!
Фраза про 64-битный танк очень актуальна.

Дополню немного этот материал.

Корневой сертификат и сертификат сервера сгенерирован, все хорошо. Хотелось бы немного рассказать об установке сертификатов на сервер IIS и настройке соединения на клиентских машинах.

Итак, по порядку.

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

Первым устанавливаем корневой сертификат (CA, файл ca.crt). Для этого открываем этот сертификат встроенной программой просмотра сертификатов и нажимаем кнопочку "Установить". Установить корневой сертификат нужно в Trusted Root Certification Authorities\Local Computer (категория доверенных корневых центров сертификации)

Далее устанавливаем сертификат сервера, который подписан уже установленным корневым сертификатом. Для этого заходим в панель управления IIS, заходим в раздел управления сертификатами и устанавливаем серверный сертификат server.p12 (формат .p12 аналогичен формату .pfx). При этом этот сертификат уже будет доверенным, т.к. он подписан корневым сертификатом, которому вы доверяете.

После этого в настройках привязки сайта к портам и протоколам (Bindings) для настройки SSL указываем только что импортированный серверный сертификат:

Теперь настроим Terrasoft на клиентской машине.
Для этого в настройках SSL прописываем:

Файл корневого сертификата - путь к файлу корневого сертификата ca.crt, который вы предварительно скопировали на клиентскую машину.

Данные о том кем и кому выдан этот сертификат берем из его свойств:

Внимательно переписываем эти данные, т.к. сравнение происходит по строгому совпадению.

Все, ваши веб-сервисы для работы через защищенное соединение SSL настроены!

Показать все комментарии