No atual cenário dos dias de hoje, é indispensável automatizar algumas tarefas ,dentre elas, a não necessidade de gerar o certificado ssl por mais de duas vezes. Porém, se o Nginx utiliza um certificado compartilhado, é indispensável obter o certificado intermediário (caso seja um .crt).
Uma sugestão é montar um volume compartilhado (preferencialmente em NFS) e manter a leitura tanto por parte do NGINX como do servidor web original, que gera automaticamente estas chaves, em sincronia.
Mas, para gerar o certificado SSL compartilhado, é possível ter um script similar a este:
Imagine que o servidor A, que possui o NGINX, lê as informações via NFS do servidor B, na pasta /mnt/certificados.
Desta forma, um script que concatenará o certificado intermediário ,para a correta utilização do NGINX, fará o seguinte:
#!/bin/bash
CERT_DIR="/mnt/certificados"
OUTPUT_DIR="/mnt/certificados/concatenados"
mkdir -p "$OUTPUT_DIR"
DOMAINS=(
"bsdsul.com.br"
)
for DOMAIN in "${DOMAINS[@]}"; do
CERT_FILE="$CERT_DIR/$DOMAIN.crt"
KEY_FILE="$CERT_DIR/$DOMAIN.key"
ISSUER_FILE="$CERT_DIR/$DOMAIN.issuer.crt"
if [[ -f "$CERT_FILE" && -f "$KEY_FILE" && -f "$ISSUER_FILE" ]]; then
OUTPUT_FILE="$OUTPUT_DIR/$DOMAIN.fullchain.pem"
cat "$CERT_FILE" "$ISSUER_FILE" > "$OUTPUT_FILE"
echo "Concatenado: $OUTPUT_FILE"
else
echo "Arquivos não encontrados para o domínio: $DOMAIN"
fi
done
Desta forma, o NGINX pode ter o seu arquivo de configuração de proxy reverso ,da seguinte forma:
server {
listen 80;
server_name bsdsul.com.br www.bsdsul.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name bsdsul.com.br www.bsdsul.com.br;
ssl_certificate /mnt/certificados/concatenados/bsdsul.com.br.fullchain.pem;
ssl_certificate_key /mnt/certificados/bsdsul.com.br.key;
location / {
proxy_pass http://192.168.x.x;
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_ssl_server_name on;
}
}
Lembrando que o NGINX funciona muito bem em Linux e FreeBSD e há uma perceptível melhora de desempenho se utilizado com FreeBSD.