Last active
February 16, 2022 08:50
-
-
Save rdeprera/682ecf48b3aaa63feadb71ace2431d6e to your computer and use it in GitHub Desktop.
Criação de certificado SSL auto-assinados para servidores HTTP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
# Modelo de certificado auto-assinados para teste SSL em virtualhosts em ambiente de testes | |
# Referências: | |
# https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04 | |
# | |
# TODO(rdeprera): criar .run apartir desse modelo | |
# TODO(rdeprera): descrever nos comentários cada uma das variáveis | |
## Valores prováveis para DIR_CERTIFICADOS: | |
# - /home/<usuario>/Documentos/certificados-ssl | |
# - /etc/httpd/httpscertificate | |
# - /etc/apache2/httpscertificate | |
DIR_CERTIFICADOS='/tmp/certificados' && \ | |
## Diretório de Arquivos de Configurações do Servidor Web | |
# Valores prováveis: | |
# - /etc/apache/conf-available | |
# - /etc/apache2/conf-available | |
DIR_CONF_SW="/etc/apache2/conf-available" && \ | |
## NOME_DO_CERTIFICADO | |
# valores prováveis: | |
# - 127.0.0.1.pem | |
# - dominio.com.pem | |
# - qualquercoisa.pem | |
NOME_DO_CERTIFICADO='localhost' && \ | |
## CERTIFICADO | |
# Nome do arquivo do certificado. | |
# valores prováveis: | |
# - nome.crt | |
# - nome.pem | |
CERTIFICADO="${NOME_DO_CERTIFICADO}.crt" && \ | |
## ARQ_CERTIFICADO | |
# valores prováveis: | |
# - /etc/apache/conf-available/ssl-params.conf | |
# - /etc/apache2/conf-available/ssl-params.conf | |
# - /home/<usuario>/.config/qualquercoisa.conf | |
CERTIFICADO_ARQ="${DIR_CONF_SW}/${CERTIFICADO}" && \ | |
## Email do webmaster do Virtual Host | |
CONFIG_VH_EMAIL="rdeprera@gmail.com" && \ | |
## Nome do Serviço do Servidor Web | |
SRV_WEB="apache2" && \ | |
## Nome/IP do Virtual Host | |
# possíveis valores: | |
# - localhost | |
CONFIG_VH_NOME="${NOME_DO_CERTIFICADO}" && \ | |
## Nome do Arquivo de Configuração do Módulo SSL do Servidor Web | |
CONFIG_SSL_SERVIDOR_WEB_ARQ_NOME="${NOME_DO_CERTIFICADO}-ssl-params" && \ | |
## Valores prováveis para CONFIG_SSL_SERVIDOR_WEB | |
# - /etc/apache/conf-available/ssl-params.conf | |
# - /etc/apache2/conf-available/ssl-params.conf | |
# - /home/<usuario>/.config/qualquercoisa.conf | |
CONFIG_SSL_SERVIDOR_WEB_ARQ="${DIR_CONF_SW}/${CONFIG_SSL_SERVIDOR_WEB_ARQ_NOME}.conf" && \ | |
## Diretório de Configuração do Virtual Host | |
# Valores prováveis: | |
# - /etc/apache/sites-available | |
# - /etc/apache2/sites-available | |
DIR_CONFIG_VH="/etc/apache2/sites-available" && \ | |
## Nome do Arquivo de Configuração do Virtual Host SSL(https/443) (sem extensão .conf) | |
# possíveis valores | |
# - localhost-ssl | |
# - default-ssl | |
# - ... e outros | |
CONFIG_VH_ARQ_NOME="${NOME_DO_CERTIFICADO}-ssl" && \ | |
## Nome do Arquivo de Configuração do Virtual Host | |
# Valores prováveis: | |
# - default-ssl.conf | |
# - default-ssl.conf | |
# - qualquercoisa.conf | |
CONFIG_VH_ARQ_NOME_EXT="${CONFIG_VH_ARQ_NOME}.conf" && \ | |
## Arquivo de Configuração do Virtual Host | |
# Valores prováveis: | |
# - $DIR_CONFIG_VH/default-ssl.conf | |
# - $DIR_CONFIG_VH/qualquercoisa.conf | |
CONFIG_VH_ARQ="${DIR_CONFIG_VH}/${CONFIG_VH_ARQ_NOME_EXT}" && \ | |
## Configuração do módulo SSL no Apache | |
CONFIG_SSL_SERVIDOR_WEB='\ | |
# from https://cipherli.st/ \ | |
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html \ | |
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH \ | |
SSLProtocol All -SSLv2 -SSLv3 \ | |
SSLHonorCipherOrder On \ | |
# Disable preloading HSTS for now. You can use the commented out header line that includes \ | |
# the "preload" directive if you understand the implications. \ | |
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" \ | |
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" \ | |
Header always set X-Frame-Options DENY \ | |
Header always set X-Content-Type-Options nosniff \ | |
# Requires Apache >= 2.4 \ | |
SSLCompression off \ | |
SSLSessionTickets Off \ | |
SSLUseStapling on \ | |
SSLStaplingCache "shmcb:logs/stapling-cache(150000)\ | |
SSLOpenSSLConfCmd DHParameters "'${DIR_CERTIFICADOS}'/dhparam.pem"' \ | |
cd /tmp && \ | |
! test -d "$DIR_CERTIFICADOS" && mkdir -p $DIR_CERTIFICADOS \ | |
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${DIR_CERTIFICADOS}/${NOME_DO_CERTIFICADO}.key \ | |
-out ${DIR_CERTIFICADOS}/${NOME_DO_CERTIFICADO}.crt && \ | |
sudo openssl dhparam -out ${DIR_CERTIFICADOS}/dhparam.pem 2048 && \ | |
## Backup do $CONFIG_SSL_SERVIDOR_WEB_ARQ ou cria o arquivo | |
if test -f "$CONFIG_SSL_SERVIDOR_WEB_ARQ"; then | |
sudo cp $CONFIG_SSL_SERVIDOR_WEB_ARQ "${CONFIG_SSL_SERVIDOR_WEB_ARQ}.bak" | |
test -f "${CONFIG_SSL_SERVIDOR_WEB_ARQ}.bak" && echo "Backup de arquivo de configuração SSL do servidor web criado em: ${CONFIG_SSL_SERVIDOR_WEB_ARQ}.bak" | |
else | |
sudo touch $CONFIG_SSL_SERVIDOR_WEB_ARQ | |
fi | |
## Gravação das configurações no arquivo $CONFIG_SSL_SERVIDOR_WEB_ARQ | |
sudo echo "$(cat $CONFIG_SSL_SERVIDOR_WEB)" > $CONFIG_SSL_SERVIDOR_WEB_ARQ && \ | |
## Backup do $CONFIG_VH_ARQ | |
if test -f "$CONFIG_VH_ARQ"; then | |
sudo cp $CONFIG_VH_ARQ "${CONFIG_VH_ARQ}.bak" | |
fi | |
sudo systemctl stop $SRV_WEB && \ | |
## Faz alterações no Arquivo de Configuração do Virtual Host | |
sudo sed -i "s|SSLCertificateFile $PARTITION_COLUMN.*|SSLCertificateFile ${CERTIFICADO_ARQ}|g" $CONFIG_VH_ARQ && \ | |
sudo sed -i "s|ServerAdmin $PARTITION_COLUMN.*|ServerAdmin ${CONFIG_VH_EMAIL}|g" $CONFIG_VH_ARQ && \ | |
sudo sed -i "s|ServerName $PARTITION_COLUMN.*|ServerName ${CONFIG_VH_NOME}|g" $CONFIG_VH_ARQ && \ | |
sudo a2enmod ssl && \ | |
sudo a2enmod headers && \ | |
sudo a2ensite $CONFIG_VH_ARQ_NOME && \ | |
sudo a2enconf $CONFIG_SSL_SERVIDOR_WEB_ARQ_NOME && \ | |
sudo apache2ctl configtest && \ | |
sudo systemctl restart $SRV_WEB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment