У меня есть 2 контейнера Docker, один с nginx с использованием SSL (443) и один с Java / Spring API, который также должен быть выставлен на 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возвращает: CONNECTED (00000003)
140514309248664: ошибка: 14077410: подпрограммы SSL: SSL23_GET_SERVER_HELLO: ошибка квитирования оповещения sslv3: s23_clnt.c: 769:
нет сертификата однорангового узла
* 1020Сертификаты ЦС клиентов не отправлены
Рукопожатие SSL прочитало 7 байтов и записало 305 байтов
Новый, (НЕТ), Шифр (НЕТ) Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение: НЕТНе согласовано ALPN. Сеанс SSL: протокол: TLSv1.2. Шифр: 0000 ID сеанса: ID сеанса: ctx: главный ключ: ключ-аргумент: нет. Идентификатор PSK: отсутствует. Подсказка идентификатора PSK: отсутствует. Имя пользователя SRP: нет. Время запуска:1549049020 Время ожидания: 300 (с). Проверить код возврата: 0 (нормально)