Сервер Nginx подключается к Java Spring с помощью SSL

У меня есть 2 контейнера Docker, один с nginx с использованием SSL (443) и один с API Java/spring, который также необходимо выставлять на HTTPS (8443).

Сертификат java, который я преобразовал из внешнего сертификата, и я создал сертификат .p12, используемый следующим образом:

server:
    port: 8443
    ssl:
        key-store: certificate.p12
        key-store-password: 123456
        key-store-type: PKCS12

Это nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    server {
        listen 80;

        location /api {
            proxy_pass https://app.site.com:8443;
        }

        location /signin {
            proxy_pass https://app.site.com:8443;
        }

        location /social/signup {
            proxy_pass https://app.site.com:8443;
        }

        server_name app.competithor.com;
        return 301 https://$server_name$request_uri;
      }
    server {
        listen 443 ssl;

        ssl on;
        ssl_certificate /etc/ssl/app.site.com.crt;
        ssl_certificate_key /etc/ssl/app.site.com.key;

        ssl_session_timeout 5m;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        server_name  localhost;

        root   /usr/share/nginx/html;
        index  index.html index.htm;
        include /etc/nginx/mime.types;

        gzip on;
        gzip_min_length 1000;
        gzip_proxied expired no-cache no-store private auth;
        gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /api {
            proxy_pass https://app.site.com:8443;
            proxy_ssl_protocols TLSv1.2;
            proxy_ssl_name $host;
            proxy_ssl_server_name on;

            proxy_set_header  Host              $host;
            proxy_set_header  X-Real-IP         $remote_addr;
            proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header  X-Forwarded-Proto $scheme;
            proxy_pass_header Authorization;
        }

        location /signin {
            proxy_pass https://app.site.com:8443;
            proxy_ssl_protocols TLSv1.2;
            proxy_ssl_name $host;
            proxy_ssl_server_name on;

            proxy_set_header  Host              $host;
            proxy_set_header  X-Real-IP         $remote_addr;
            proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header  X-Forwarded-Proto $scheme;
            proxy_pass_header Authorization;
        }

        location /social/signup {
            proxy_pass https://app.site.com:8443;
           proxy_ssl_protocols TLSv1.2;
           proxy_ssl_name $host;
           proxy_ssl_server_name on;

           proxy_set_header  Host              $host;
           proxy_set_header  X-Real-IP         $remote_addr;
           proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
           proxy_set_header  X-Forwarded-Proto $scheme;
           proxy_pass_header Authorization;
        }
    }
}

У меня всегда есть эта ошибка: [ошибка] 6 # 6: * 4 SSL_do_handshake () не удалось (SSL: ошибка: 14077410: подпрограммы SSL: SSL23_GET_SERVER_HELLO: сбой рукопожатия оповещения sslv3) при квитировании SSL к восходящему потоку

Я пробовал много настроек в конфигурации nginx и java, но та же ошибка. Кто-нибудь знает, как может работать это рукопожатие/соединение?

ОБНОВЛЕНИЕ: Java-приложение - Maven, должен ли я настроить хранилище ключей в файле mvnw?

ОБНОВЛЕНИЕ2: openssl s_client -connect localhost:8443 возвращает: ПОДКЛЮЧЕН(00000003)

140514309248664: ошибка: 14077410: процедуры SSL: SSL23_GET_SERVER_HELLO: ошибка рукопожатия предупреждения sslv3: s23_clnt.c: 769:

нет доступного однорангового сертификата

Имена ЦС сертификата клиента не отправлены

Рукопожатие SSL прочитало 7 байт и записало 305 байт

Новый, (НЕТ), Шифр ​​(НЕТ) Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение: НЕТ ALPN не согласован SSL-сессия: Протокол: TLSv1.2 Шифр: 0000 Идентификатор сессии: Идентификатор сеанса-ctx: Мастер ключ: Key-Arg : Нет Идентификация PSK: нет Подсказка идентификации PSK: нет Имя пользователя SRP: нет Время начала: 1549049020 Время ожидания: 300 (сек) Подтвердите код возврата: 0 (хорошо)

Вы добавили хранилища ключей SSL в приложение Java? . поделитесь этими конфигами

Barath 01.02.2019 10:56

Что вы имеете в виду, чтобы добавить хранилища ключей SSL, где я должен их добавить? Разве сертификат.p12 не является хранилищем ключей? Или это нужно где-то добавить на сервер Docker?

Tibi C 01.02.2019 12:58

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

Barath 01.02.2019 13:08

Сертификат .p12 находится в той же папке, что и java-приложение. Конфигурация java также есть в моем посте: server: port: 8443 ssl: key-store: certificate.p12 key-store-password: 123456 key-store-type: PKCS12 У меня есть docker run: docker run -d -it -p 8443:8443 <контейнер>

Tibi C 01.02.2019 14:55

Должен ли файл certificate.p12 находиться в той же папке, что и application.yml?

Tibi C 01.02.2019 15:05

Добавьте также в трастовые магазины. Также поделитесь журналами контейнера Java

Barath 01.02.2019 15:40

Мне удалось установить сертификат в хранилище ключей, но у меня все еще есть та же ошибка во внешнем контейнере. Контейнер Java не показывает ошибок.

Tibi C 01.02.2019 20:01

Поделитесь своим проектом на GitHub, посмотрю

Barath 01.02.2019 20:01

Что возвращает «openssl s_client -connect localhost: 8443»?

TheFiddlerWins 01.02.2019 20:08

Java-проект находится здесь: wetransfer.com/downloads/…

Tibi C 01.02.2019 20:22

@ Барат, у тебя было время взглянуть на код? У вас есть отзывы? Спасибо.

Tibi C 04.02.2019 18:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
11
753
0

Другие вопросы по теме