Я пытаюсь настроить VPS на Ubuntu Server 18.04, на котором я установил GOGS, JENKINS и TOMCAT. С Nginx я разрешаю делать только запросы https, но когда я делаю из Insomnia веб-службу api, развернутую в Tomcat, я получаю сообщение «сертификат однорангового узла не может быть аутентифицирован с помощью заданных сертификатов CA». Это то же самое сообщение, что и при отправке фиксации в репозиторий Gogs. Сертификат ssl подписан центром сертификации. Я не знаю, что происходит, но для начала я использую конфигурацию Nginx и Gogs.
Конфигурация Nginx:
upstream tomcat {
server 127.0.0.1:8081 weight=100 max_fails=5 fail_timeout=5;
}
server {
listen 443 ssl;
server_name serverName;
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/certificate.key;
root /var/www;
index index.php;
# TOMCAT8
location /manager {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat/manager;
}
location /test {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat/test;
}
location ~ \.jsp$ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Server-Proto $server_protocol;
}
# GOGS
location /gogs/ {
# Proxy headers
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
# Log files
access_log /var/log/nginx/gogs.access.log;
error_log /var/log/nginx/gogs.error.log;
# Redirect
proxy_pass http://localhost:3000/;
}
}
Конфигурация сервера Gogs:
[server]
DOMAIN = localhost
HTTP_PORT = 3000
ROOT_URL = https://serverName/gogs/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = false
OFFLINE_MODE = false
Через неделю я нашел решение своей проблемы. Ошибка заключалась в том, что в файле certificate.crt не была объединена подпись CA.
Я не знал, но для Nginx необходимо объединить все сертификаты в один файл. Сертификат для домена (* .crt) должен быть указан первым в файле, а затем цепочка сертификатов CA (* .ca-bundle). Я поставил сертификат только для своего домена (* .ctr), поэтому центр сертификации не был найден.
Я заставил это работать, объединив два сертификата в один с помощью следующей команды linux:
cat certificate.ca-bundle >> certificate.crt