Создание безопасной веб-службы без покупки (и обновления) сертификата

#web-services #iis #https #web

#веб-службы #iis #https #веб

Вопрос:

Цель: безопасная веб-служба, которая будет вызываться ровно двумя клиентами, оба вне локальной сети. Наиболее очевидный способ защитить веб-службу — через https, получив сертификат от какого-либо центра сертификации. Проблема в том, что это глупая трата денег. Весь смысл центра сертификации в том, что это общедоступный центр, которому доверяют, поэтому мне не нужно подтверждать свою личность каждому отдельному пользователю, который хочет использовать мою веб-страницу, центр сертификации делает это за них. Однако, когда я имею дело с очень небольшим числом известных клиентов, а не с широкой публикой, мне не нужно, чтобы кто-то за меня ручался. Мы можем выполнить проверку по нашим собственным каналам.

Есть ли какой-либо способ добиться этого? В идеале я мог бы управлять https с сертификатом, распознанным теми, кто обращается к моей службе, и если никто другой не признает сертификат действительным, мне все равно. Я все равно не хочу, чтобы они вызывали эту службу. Это должно быть довольно распространенной потребностью при передаче данных B2B (связь с фиксированной конечной точкой, а не услуги, предназначенные для общего пользования), и это легко сделать, если вы передаете реальные файлы (шифрование в стиле PGP позволяет вам просто проверять и импортировать ключи друг друга напрямую). Но мне не ясно, возможно ли это с помощью веб-сеансов. Это, конечно, должно быть, если это не так. Я нашел некоторую документацию по самозаверяющим сертификатам, но все они, похоже, предназначены только для целей разработки или только для внутреннего использования и срок их действия быстро истекает или требуется подключение к одной сети.

Есть ли хороший способ добиться этого? Или мне придется вместо этого шифровать содержимое вызова веб-службы? Последнее менее желательно, поскольку это потребовало бы от пользователей этой службы добавления кода шифрования в свои клиентские приложения (что предполагает, что они создают их на платформе, которая легко может добавить поддержку общих процедур шифрования, что может быть правдой, а может и не быть), а не просто полагаться на стандартную платформу https.

Я работаю на платформе Windows (IIS / ASP.NET), если это имеет какое-либо значение.

Ответ №1:

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

Когда я реализовал это в среде Java, самый полезный ресурс, который я нашел, был в блоге Baban. Вероятно, вы можете найти ресурс, более подходящий для вашей среды IIS.

Комментарии:

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

Ответ №2:

Для предоставления защищенной службы вам не нужен никакой сертификат, только ссылка https. Вы правы в том, что в вашем случае сертификат ничего не делает для вас. Если ваш посетитель настаивает на сертификате, то я поддерживаю ответ @sudocode.

Комментарии:

1. Разве это не то же самое, что сказать, что для того, чтобы добраться отсюда туда, вам не нужен бензин, только автомобиль? Я почти уверен, что обмен сертификатами является частью определения того, как работает сеанс TLS (и, следовательно, https). Я ошибаюсь?

2. Проголосуйте за отличное сравнение 🙂 Но вам не нужен сертификат.

3. Спасибо. 🙂 Но я все еще не понимаю, как это возможно. HTTPS — это HTTP SSL / TLS. Из описания TLS в Википедии:

4. [Клиент сервер] согласовывают [соединение] с помощью [рукопожатия]… [Это] начинается, когда клиент … представляет … шифры и хэш-функции. … Сервер выбирает самый надежный… Сервер отправляет … свой [ID] в виде цифрового сертификата. … Клиент может связаться с [центром сертификации] и подтвердить … сертификат … … Клиент шифрует случайное число открытым ключом сервера… На основе [этого] оба … генерируют материал ключа … [используемый для подключения]. Если [любой шаг] завершается неудачей… соединение не создано.

5. Другими словами, использование сертификатов кажется неотъемлемым от определения TLS, которое использует HTTPS.

Ответ №3:

Наша старая служба авторизации использовала сертификаты, но при ее восстановлении мы избавились от сертификатов и перешли на систему безопасности в стиле Amazon ec2 для служб.

Комментарии:

1. Я не использовал EC2, каким бы это был механизм безопасности?