Java: шифрование TCP, SSL и Netty - PullRequest
3 голосов
/ 02 февраля 2012

Хорошо, поэтому у меня есть одноранговая (клиент / сервер на одном хосте) настройка (через локальную локальную сеть), это использует Netty, сетевую среду Java.Я использую необработанный TCP / IP (как, например, без HTTP) для связи и передачи.

В настоящее время все данные передаются в виде простого текста, и я начинаю процесс защиты таких передаваемых данных.

Я хорошо читал о типах шифрования / методах и т. Д. (Но, вероятно, уже коснулся поверхности, и это уже тает у меня в голове)

Netty включает реализацию SSL, вот некоторые ссылки на, надеюсь, лучшеОбъясните:

http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/package-summary.html

Внутри SecureChatTrustManagerFactory есть 2 метода:

          public void checkClientTrusted(
                  X509Certificate[] chain, String authType) throws CertificateException {
              // Always trust - it is an example.
              // You should do something in the real world.
              // You will reach here only if you enabled client certificate auth,
              // as described in SecureChatSslContextFactory.
              System.err.println(
                      "UNKNOWN CLIENT CERTIFICATE: " + chain[0].getSubjectDN());
          }

          public void checkServerTrusted(
                 X509Certificate[] chain, String authType) throws CertificateException {
             // Always trust - it is an example.
              // You should do something in the real world.
              System.err.println(
                      "UNKNOWN SERVER CERTIFICATE: " + chain[0].getSubjectDN());
          }

SecureChatKeyStore содержит сертификат с жестким кодом из того, что я вижу.

Итак, мои вопросы:

  • Нужно ли мне создавать сертификат?
  • Если да, то каждый раз, когда приложение запускается?
  • если да, для каждого клиента?
  • если да, передается ли эта сертификация между клиентом и сервером?
  • , если это так, как это безопасно?

I 'Я не совсем уверен, с чего начать.Из того, что я вижу, реализация Netty говорит: «Вот основа создания безопасных соединений, но мы упустили ту часть, которая фактически делает их безопасными / аутентифицированными».

Любые другие указатели / советы, о которых я должен знать?

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

1 Ответ

0 голосов
/ 05 февраля 2012

Как уже отмечали другие, существует разница между безопасностью приложений и безопасностью транспортных связей. Я думаю, что вы стремитесь к последнему, поскольку вы в основном упоминаете шифрование. Шифрование обеспечивает конфиденциальность от подслушивающих. Более того, поскольку SSL также включает в себя код аутентификации сообщений, он также обеспечит защиту сторонних пакетов, изменяющих пакеты во время транзита. Он не обеспечивает никакой защиты сообщений после их получения.

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

Лучше всего начинать с «самозаверяющего» сертификата сервера. Это то, что вам нужно доверять методу checkServerTrusted. По сути, цепочка - это просто один сертификат.

...