У меня есть 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)
Новый, (НЕТ), Шифр (НЕТ) Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение: НЕТ ALPN не согласован SSL-сессия: Протокол: TLSv1.2 Шифр: 0000 Идентификатор сессии: Идентификатор сеанса-ctx: Мастер ключ: Key-Arg : Нет Идентификация PSK: нет Подсказка идентификации PSK: нет Имя пользователя SRP: нет Время начала: 1549049020 Время ожидания: 300 (сек) Подтвердите код возврата: 0 (хорошо)
Что вы имеете в виду, чтобы добавить хранилища ключей SSL, где я должен их добавить? Разве сертификат.p12 не является хранилищем ключей? Или это нужно где-то добавить на сервер Docker?
поделитесь конфигурациями хранилища ключей Java, чтобы узнать, что происходит, указали ли вы этот тип хранилища ключей как (.p12). Вы убедились, что Java-приложение обслуживается через https?
Сертификат .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 <контейнер>
Должен ли файл certificate.p12 находиться в той же папке, что и application.yml?
Добавьте также в трастовые магазины. Также поделитесь журналами контейнера Java
Мне удалось установить сертификат в хранилище ключей, но у меня все еще есть та же ошибка во внешнем контейнере. Контейнер Java не показывает ошибок.
Поделитесь своим проектом на GitHub, посмотрю
Что возвращает «openssl s_client -connect localhost: 8443»?
Java-проект находится здесь: wetransfer.com/downloads/…
@ Барат, у тебя было время взглянуть на код? У вас есть отзывы? Спасибо.




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