Часто встречающиеся проблемы и пути их устранения#

В случае падения приложения cache данных по сессиям удаляется, что приводит к обрыву активных сессий пользователей и их "выбросу" из приложений, использующих KeyCloak.SE

Сертификат#

SSL-сертификат – это цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение. SSL-сертификат содержит следующую информацию:

  • доменное имя, на которое оформлен SSL-сертификат;

  • юридическое лицо, которое владеет сертификатом;

  • физическое местонахождение владельца сертификата (город, страна);

  • срок действия сертификата;

  • реквизиты компании-поставщика SSL-сертификатa.

Протокол HTTPS, поддерживающий технологию шифрования TLS/SSL, использует сертификаты для проверки принадлежности открытого ключа его реальному владельцу. Он создает безопасный канал в незащищенной сети. Это обеспечивает достаточную защиту от перехватчиков и атак типа «человек посередине» при условии, что используются адекватные наборы шифров и что сертификат сервера проверен и доверен.

Способы получения SSL-сертификата:

  • Использовать сертификат, выданный CA (Certification authority), то есть центром сертификации или удостоверяющим центром;

  • Использовать самоподписанный сертификат;

  • Использовать «пустой» сертификат.

Самоподписанный сертификат — сертификат, созданный самим пользователем — в этом случае издатель сертификата совпадает с владельцем сертификата. «Пустой» сертификат — сертификат, содержащий фиктивную информацию, используемую в качестве временной для настройки SSL и проверки его функциональности в данной среде.

Для получения самоподписанного сертификата необходимо:

ssl.conf

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
 
[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
countryName_default         = RU
stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = Moscow
localityName                = Locality Name (eg, city)
localityName_default        = Moscow
organizationName            = Organization Name (eg, company)
organizationName_default    = Sberbank
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64
commonName_default          = apps.dev-gen.my.company.ru
 
[ req_ext ]
subjectAltName = @alt_names
 
[alt_names]
DNS.1   = *.apps.dev-gen.my.company.ru

get_selfsigned_cert.sh

openssl req -newkey rsa:4096 -x509 -days 3654 -nodes \
-config ssl.conf \
-keyout ca.key -out ca.crt
 
# Создание сертов под сервер\стенд
name=proxy-server
openssl req -new -newkey rsa:4096 -sha256 -nodes \
-keyout $name.key -out $name.csr \
-config ssl.conf
 
openssl x509 -req -CAcreateserial -days 1000 -sha256 \
-CA ca.crt -CAkey ca.key \
-extensions req_ext \
-extfile ssl.conf \
-in $name.csr -out $name.crt

Уязвимости#

Неиспользуемые зависимости#

Для того чтобы используемые модули были максимально безопасными, рекомендуется исключать из зависимостей неиспользуемые зависимости. Эти неиспользуемые зависимости по-прежнему доступны в вашей программе и могут содержать уязвимые места. В целом, независимо от того, используется зависимость или нет, разработчики должны проверить, безопасно ли включать ее в свою систему.

Maven помогает определить неиспользуемые зависимости: pom.xml

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>3.1.2</version>
        </plugin>
    </plugins>
</build>

Необходимо запустить в командной строке:

mvn dependency:analyze

IntelliJ IDEA так же позволяет найти уязвимости в используемых зависимостях.

XSS#

XSS (межсайтовый скриптинг) – одна из разновидностей атак на веб-системы, которая подразумевает внедрение вредоносного кода на определенную страницу сайта и взаимодействие этого кода с удаленным сервером злоумышленников при открытии страницы пользователем.

Основная цель межсайтового скриптинга – кража cookies пользователей при помощи встроенного на сервере скрипта с дальнейшей выборкой необходимых данных и использованием их для последующих атак и взломов. Злоумышленник осуществляет атаку пользователей не напрямую, а с использованием уязвимостей веб-сайта, который посещают жертвы, и внедряет специальный JavaScript. В браузере у пользователей этот код отображается как единая часть сайта. При этом посещаемый ресурс по факту является соучастником XSS-атаки.

Необходимо экранировать входящие и исходящие строковые параметры.

EscapeHtml.java

org.apache.commons.lang.StringEscapeUtils.escapeHtml("example_with_vulnerability");

Либо заменять специальные символы (&,<,>,",'), которые используются для записи скрипта, на html entities name.