IPsec на практике в Java - PullRequest
       29

IPsec на практике в Java

1 голос
/ 10 июня 2011

Я смотрю на безопасность сетевых коммуникаций (UDP и TCP).Похоже, «использовать IPSec» является хорошим решением.Я знаю, что это реализовано на более низком уровне, и приложение не должно видеть это.Однако я хочу, чтобы мое приложение Java было безопасным, и я знал, что оно безопасно.

Итак, что на практике мне нужно сделать, чтобы использовать IPSec в приложении Java?Я все еще использую DatagramSocket / java.net.Socket.Socket?Есть ли что-то, что мне нужно сделать с System.getSecurityManager ()?Нужно ли выполнять настройку на уровне ОС (Windows XP говорит с облаком Amazon)?

В какой-то момент мне потребуется проверить / предоставить учетные данные безопасности.Как это сделать?

Я довольно много гуглил и видел на сетевом уровне, как это работает.Но я не нашел ничего похожего на пример кода приложения, который бы использовал IPSec.

Кто-нибудь делал это?

Спасибо!

Ответы [ 3 ]

1 голос
/ 13 июня 2011

Хорошо, я нашел информацию, которую искал. Может быть, вопрос не прояснил, что именно я хотел, но вот что я нашел:

IPSec должен быть настроен в операционной системе (для упрощения). Вы устанавливаете связь между двумя машинами и позволяете им идти на это. Вы знаете, что у вас есть безопасное соединение, потому что вы разрешаете только безопасные соединения на этом компьютере. Если у вас не настроен IPSec, он не будет безопасным, поэтому вам просто нужно убедиться, что вы это делаете.

Безопасность может быть общим секретом или сертификатом X509

И некоторые полезные инструкции:

Для Linux http://www.ipsec -howto.org / x304.html

Для Windows: http://www.elandsys.com/resources/ipsec/wincert.html

1 голос
/ 10 июня 2011

Вы не можете сделать это - как вы сказали, что это на более низком уровне - намного ниже!

Есть ли какая-то особая причина, почему "использование SSL" не является хорошим решением

0 голосов
/ 29 мая 2013

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

К сожалению, нет стандартного API для обнаружения IPSec в сокете (и любая Java для этого будет вынуждена взаимодействовать с собственными системными вызовами). Кроме того, обратите внимание, что IPSec может применяться маршрутизатором где-то вдоль маршрута, прозрачно, поэтому его можно обнаружить только в том случае, если он применяется ядром ОС.

APIs:

  • WSAQuerySocketSecurity
  • setsockopt (sock, IPPROTO_IP, IP_SEC_OPT & opts) начиная с Solaris 8 ( отличное руководство здесь )
  • Шокирующе полностью (?) Недокументированный IP_IPSEC_POLICY в linux
  • Хорошо документированный IP_IPSEC_POLICY во FreeBSD и MacOS (с использованием хорошо зарекомендовавшей себя реализации KAME). Искать примеры в /usr/src.
...