One place for hosting & domains

      Apache

      Comment créer un certificat SSL auto-signé pour Apache dans Ubuntu 20.04


      Introduction

      TLS, ou “transport layer security” – et son prédécesseur SSL – sont des protocoles utilisés pour envelopper le trafic normal dans une enveloppe protégée et cryptée. Grâce à cette technologie, les serveurs peuvent envoyer en toute sécurité des informations à leurs clients sans que leurs messages soient interceptés ou lus par une partie extérieure.

      Dans ce guide, nous vous montrerons comment créer et utiliser un certificat SSL auto-signé avec le serveur web Apache sur Ubuntu 20.04.

      Note : un certificat auto-signé cryptera la communication entre votre serveur et les clients éventuels. Cependant, comme il n’est signé par aucune des autorités de certification de confiance incluses avec les navigateurs web et les systèmes d’exploitation, les utilisateurs ne peuvent pas utiliser le certificat pour valider automatiquement l’identité de votre serveur. Par conséquent, vos utilisateurs verront une erreur de sécurité lorsqu’ils visiteront votre site.

      En raison de cette limitation, les certificats auto-signés ne sont pas appropriés pour un environnement de production destiné au public. Ils sont généralement utilisés pour les tests ou pour sécuriser des services non critiques utilisés par un seul utilisateur ou un petit groupe d’utilisateurs qui peuvent établir la confiance dans la validité du certificat par d’autres canaux de communication.

      Pour une solution de certificat plus adaptée à la production, consultez Let’s Encrypt, une autorité de certification gratuite. Vous pouvez apprendre comment télécharger et configurer un certificat Let’s Encrypt dans notre tutoriel Comment sécuriser Apache avec Let’s Encrypt sur Ubuntu 20.04.

      Conditions préalables

      Avant de commencer ce tutoriel, vous aurez besoin des éléments suivants :

      • Un accès à un serveur Ubuntu 20.04 avec un utilisateur non root sudo. Notre guide de configuration initiale du serveur avec Ubuntu 20.04 peut vous montrer comment créer ce compte.
      • Vous devrez également avoir installé Apache. Vous pouvez installer Apache en utilisant apt. Tout d’abord, mettez à jour l’index local des paquets afin de refléter les derniers changements en amont :

      Ensuite, installez le paquet apache2 :

      Enfin, si vous avez installé un pare-feu ufw, ouvrez les ports http et https :

      • sudo ufw allow "Apache Full"

      Une fois ces étapes terminées, assurez-vous que vous êtes connecté en tant que non- root user et poursuivez le tutoriel.

      Étape 1 — Activation de mod_ssl

      Pour pouvoir utiliser un certificat SSL quel qu’il soit, nous devons d’abord activer mod_ssl, un module Apache qui prend en charge le cryptage SSL.

      Activez mod_ssl à l’aide de la commande a2enmod :

      Redémarrez Apache pour activer le module :

      • sudo systemctl restart apache2

      Le module mod_ssl est maintenant activé et prêt à l’emploi.

      Étape 2 – Création du certificat SSL

      Maintenant qu’Apache est prêt à utiliser le cryptage, nous pouvons passer à la génération d’un nouveau certificat SSL. Le certificat stockera quelques informations de base sur votre site, et sera accompagné d’un fichier clé qui permet au serveur de traiter les données cryptées en toute sécurité.

      Nous pouvons créer les fichiers de clés et de certificats SSL avec la commande openssl :

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      Après avoir entré la commande, vous serez amené à une invite où vous pourrez entrer des informations sur votre site web. Avant d’en parler, voyons ce qui se passe dans la commande que nous donnons :

      • openssl : c’est l’outil de ligne de commande utilisé pour la création et la gestion des certificats, clés et autres fichiers OpenSSL.
      • req -x509 : cela spécifie que nous voulons utiliser la gestion des demandes de signature de certificats (CSR) X.509. X.509 est une norme d’infrastructure de clé publique à laquelle SSL et TLS adhèrent pour la gestion des clés et des certificats.
      • -nodes : cela indique à OpenSSL de ne pas utiliser l’option de sécurisation de notre certificat par une phrase de passe. Nous avons besoin qu’Apache soit capable de lire le fichier, sans intervention de l’utilisateur, au démarrage du serveur. Une phrase de passe empêcherait que cela se produise, puisque nous devrions la saisir après chaque redémarrage.
      • -days 365 : cette option fixe la durée pendant laquelle le certificat sera considéré comme valide. Ici, nous l’avons fixée pour un an. De nombreux navigateurs modernes refusent les certificats dont la durée de validité dépasse un an.
      • -newkey rsa:2048 : cette option précise que nous voulons générer un nouveau certificat et une nouvelle clé en même temps. Nous n’avons pas créé la clé nécessaire pour signer le certificat lors d’une étape précédente, nous devons donc la créer en même temps que le certificat. La partie rsa:2048 lui demande de fabriquer une clé RSA de 2048 bits.
      • -keyout : cette ligne indique à OpenSSL où placer le fichier de clé privée généré que nous créons.
      • -out : cela indique à OpenSSL où placer le certificat que nous créons.

      Remplissez les invites de manière appropriée. La ligne la plus importante est celle qui demande le Common Name (nom commun). Vous devez entrer soit le nom d’hôte que vous utiliserez pour accéder au serveur, soit l’adresse IP publique du serveur. Il est important que ce champ corresponde à ce que vous allez mettre dans la barre d’adresse de votre navigateur pour accéder au site, car une mauvaise correspondance entraînera davantage d’erreurs de sécurité.

      La liste complète des invites ressemblera à ceci :

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Example
      Locality Name (eg, city) [Default City]:Example 
      Organization Name (eg, company) [Default Company Ltd]:Example Inc
      Organizational Unit Name (eg, section) []:Example Dept
      Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
      Email Address []:[email protected]
      

      Les deux fichiers que vous avez créés seront placés dans les sous-répertoires appropriés sous /etc/ssl.

      Ensuite, nous mettrons à jour notre configuration Apache pour utiliser le nouveau certificat et la nouvelle clé.

      Étape 3 – Configuration d’Apache pour utiliser SSL

      Maintenant que nous disposons de notre certificat et de notre clé auto-signés, nous devons mettre à jour notre configuration Apache pour pouvoir les utiliser. Sur Ubuntu, vous pouvez placer de nouveaux fichiers de configuration Apache (ils doivent se terminer par .conf) dans /etc/apache2/sites-available/ et ils seront chargés la prochaine fois que le processus Apache sera rechargé ou redémarré.

      Pour ce tutoriel, nous allons créer un nouveau fichier de configuration minimale. (Si vous avez déjà configuré Apache <Virtualhost> et que vous devez juste y ajouter SSL, vous devrez probablement copier les lignes de configuration qui commencent par SSL, et changer le port du VirtualHost de 80 à 443. Nous nous occuperons du port 80 dans la prochaine étape).

      Ouvrez un nouveau fichier dans le répertoire /etc/apache2/sites-available :

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Collez-y la configuration minimale suivante de VirtualHost :

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:443>
         ServerName your_domain_or_ip
         DocumentRoot /var/www/your_domain_or_ip
      
         SSLEngine on
         SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
         SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      </VirtualHost>
      
      

      Veillez à mettre à jour la ligne ServerName en fonction de la manière dont vous avez l’intention de nommer votre serveur. Il peut s’agir d’un nom d’hôte, d’un nom de domaine complet ou d’une adresse IP. Assurez-vous que ce que vous choisissez correspond au Common Name (nom commun) que vous avez choisi lors de l’établissement du certificat.

      Les lignes restantes indiquent un répertoire DocumentRoot à partir duquel les fichiers seront servis, ainsi que les options SSL nécessaires pour faire pointer Apache vers notre certificat et notre clé nouvellement créés.

      Nous allons maintenant créer notre DocumentRoot et y insérer un fichier HTML à des fins de test :

      • sudo mkdir /var/www/your_domain_or_ip

      Ouvrez un nouveau fichier index.html avec votre éditeur de texte :

      • sudo nano /var/www/your_domain_or_ip/index.html

      Collez ce qui suit dans le fichier vierge :

      /var/www/your_domain_or_ip/index.html

      <h1>it worked!</h1>
      

      Ce n’est pas un fichier HTML complet, bien sûr, mais les navigateurs sont indulgents et cela suffira pour vérifier notre configuration.

      Enregistrez et fermez le fichier. Ensuite, nous devons activer le fichier de configuration avec l’outil a2ensite :

      • sudo a2ensite your_domain_or_ip.conf

      Ensuite, effectuons un test à la recherche d’éventuelles erreurs de configuration :

      • sudo apache2ctl configtest

      Si tout fonctionne correctement, vous obtiendrez un résultat qui ressemble à ceci :

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      La première ligne est un message vous indiquant que la directive ServerName n’est pas définie globalement. Si vous ne voulez plus voir ce message s’afficher, vous pouvez définir ServerName en spécifiant le nom de domaine ou l’adresse IP de votre serveur dans /etc/apache2/apache2.conf. Ceci est facultatif car le message ne fera pas de mal.

      Si votre sortie contient Syntax OK, votre fichier de configuration ne contient aucune erreur de syntaxe. Nous pouvons recharger Apache en toute sécurité pour que nos modifications soient appliquées :

      • sudo systemctl reload apache2

      Chargez maintenant votre site dans un navigateur, en veillant à utiliser https:// au début.

      Vous devriez voir une erreur. C’est normal pour un certificat auto-signé ! Le navigateur vous avertit qu’il ne peut pas vérifier l’identité du serveur, car notre certificat n’est signé par aucune de ses autorités de certification connues. Pour les tests et l’utilisation personnelle, cela peut être très bien. Vous devriez pouvoir cliquer pour accéder à des informations avancées ou complémentaires et choisir de poursuivre.

      Une fois que vous l’aurez fait, votre navigateur chargera le message it worked! .

      Remarque : si votre navigateur ne se connecte pas du tout au serveur, assurez-vous que votre connexion n’est pas bloquée par un pare-feu. Si vous utilisez ufw, les commandes suivantes ouvriront les ports 80 et 443 :

      • sudo ufw allow "Apache Full"

      Nous allons ensuite ajouter une autre section VirtualHost à notre configuration pour servir les requêtes HTTP simples et les rediriger vers HTTPS.

      Étape 4 — Redirection de HTTP vers HTTPS

      Actuellement, notre configuration ne répondra qu’aux demandes HTTPS sur le port 443. Il est bon de répondre également sur le port 80, même si vous voulez forcer le cryptage de tout le trafic. Mettons en place un VirtualHost pour répondre à ces demandes non cryptées et les rediriger vers le HTTPS.

      Ouvrez le même fichier de configuration Apache que celui que nous avons lancé lors des étapes précédentes :

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      En bas, créez un autre bloc VirtualHost pour faire correspondre les demandes sur le port 80. Utilisez la directive ServerName pour faire correspondre à nouveau votre nom de domaine ou votre adresse IP. Ensuite, utilisez Redirect (Rediriger) pour faire correspondre les requêtes et les envoyer au VirtualHost SSL. Veillez à inclure la barre oblique :

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:80>
          ServerName your_domain_or_ip
          Redirect / https://your_domain_or_ip/
      </VirtualHost>
      

      Enregistrez et fermez ce fichier lorsque vous avez terminé, puis testez à nouveau la syntaxe de votre configuration, et rechargez Apache :

      • sudo apachectl configtest
      • sudo systemctl reload apache2

      Vous pouvez tester la nouvelle fonctionnalité de redirection en visitant votre site avec le simple http:// devant l’adresse. Vous devriez être redirigé automatiquement vers https://.

      Conclusion

      Vous avez maintenant configuré Apache pour servir des demandes cryptées en utilisant un certificat SSL auto-signé, et pour rediriger les demandes HTTP non cryptées vers HTTPS.

      Si vous envisagez d’utiliser SSL pour un site web public, vous devriez envisager d’acheter un nom de domaine et d’utiliser une autorité de certification largement reconnue telle que Let’s Encrypt.

      Pour plus d’informations sur l’utilisation de Let’s Encrypt avec Apache, veuillez lire notre tutoriel Comment sécuriser Apache avec Let’s Encrypt sur Ubuntu 20.04.



      Source link

      Como criar um certificado SSL auto-assinado para o Apache no Ubuntu 20.04


      Introdução

      O TLS, ou “segurança de camada de transporte” — e seu antecessor, o SSL — são protocolos usados para envolver o tráfego normal em um pacote protegido, criptografado. Ao usar esta tecnologia, os servidores podem enviar informações com segurança aos seus clientes sem que suas mensagens sejam interceptadas ou lidas por terceiros.

      Neste guia, mostraremos como criar e usar um certificado SSL auto-assinado com o servidor Web Apache no Ubuntu 20.04.

      Nota: um certificado auto-assinado irá criptografar a comunicação entre seu servidor e qualquer cliente. No entanto, uma vez que ele não é assinado por nenhuma das autoridades de certificados confiáveis incluídas com navegadores Web e sistemas operacionais, os usuários não podem usar o certificado para validar a identidade do seu servidor automaticamente. Como resultado, seus usuários irão ver um erro de segurança ao visitar seu site.

      Devido a esta limitação, certificados auto-assinados não são adequados para um ambiente de produção que atenda ao público. Eles são normalmente usados para testes, ou para proteger serviços não críticos usados por um único usuário ou um pequeno grupo de usuários que possam estabelecer confiança na validade do certificado através de canais de comunicação alternativos.

      Para uma solução de certificado mais pronta para produção, confira o Let’s Encrypt, uma autoridade certificadora gratuita. Você pode aprender como baixar e configurar um certificado Let’s Encrypt em nosso tutorial How To Secure Apache with Let’s Encrypt on Ubuntu 20.04.

      Pré-requisitos

      Antes de iniciar este tutorial, você precisará do seguinte:

      • Acesso a um servidor Ubuntu 20.04 com um usuário não-root, habilitado no sudo. Nosso guia Initial Server Setup with Ubuntu 20.04 pode lhe mostrar como criar esta conta.
      • Você também precisará ter o Apache instalado. Você pode instalar o Apache usando o apt. Primeiro, atualize o índice de pacotes local para refletir as últimas alterações upstream:

      Então, instale o pacote apache2:

      E, finalmente, se você tiver um firewall ufw configurado, abra as portas http e https:

      • sudo ufw allow "Apache Full"

      Depois de completar estes passos, lembre-se de fazer o login com um usuário não-root para seguir com o tutorial.

      Passo 1 — Habilitando o mod_ssl

      Antes de usarmos qualquer certificado de SSL, é necessário, primeiramente, habilitar o mod_ssl, um módulo do Apache compatível com criptografia SSL.

      Habilite o mod_ssl com o comando a2enmod:

      Reinicie o Apache para ativar o módulo:

      • sudo systemctl restart apache2

      O módulo mod_ssl agora está habilitado e pronto para uso.

      Passo 2 — Criando o certificado SSL

      Agora que o Apache está pronto para usar criptografia, podemos passar para a geração de um novo certificado SSL. O certificado irá armazenar algumas informações básicas sobre seu site, e será acompanhado por um arquivo de chave que permite ao servidor lidar com segurança com dados criptografados.

      Podemos criar a chave SSL e os arquivos de certificado com o comando openssl:

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      Depois de inserir o comando, você será levado a um prompt onde você pode inserir informações sobre seu site. Antes de passarmos por isso, vamos ver o que está acontecendo no comando que estamos emitindo:

      • openssl: esta é a ferramenta de linha de comando para criação e gerenciamento de certificados OpenSSL, chaves e outros arquivos.
      • req -x509: isto especifica que queremos usar o gerenciamento X.509 de solicitação de assinatura de certificado (CSR). O X.509 é um padrão de infraestrutura de chave pública ao qual o SSL e o TLS aderem para gerenciamento de chaves e certificados.
      • -nodes: isso diz ao OpenSSL para pular a opção de proteger nosso certificado com uma frase secreta. Precisamos que o Apache consiga ler o arquivo, sem a intervenção do usuário, quando o servidor for iniciado. Uma frase secreta impediria que isso acontecesse porque teríamos que digitá-la após cada reinício.
      • -days 365: esta opção define o período de tempo em que o certificado será considerado válido. Aqui, nós configuramos ela para um ano. Muitos navegadores modernos irão rejeitar quaisquer certificados que sejam válidos por mais de um ano.
      • -newkey rsa:2048: isso especifica que queremos gerar um novo certificado e uma nova chave ao mesmo tempo. Não criamos a chave necessária para assinar o certificado em um passo anterior, então precisamos criá-la junto com o certificado. A parte rsa:2048 diz a ele para criar uma chave RSA com 2048 bits.
      • -keyout: esta linha diz ao OpenSSL onde colocar o arquivo de chave privada gerado que estamos criando.
      • -out: isso diz ao OpenSSL onde colocar o certificado que estamos criando.

      Preencha os prompts devidamente. A linha mais importante é aquela que requisita o Common Name. Você precisa digitar o nome do host que usará para acessar o servidor ou o IP público do mesmo. É importante que este campo corresponda ao que você colocar na barra de endereços do seu navegador para acessar o site, pois uma incompatibilidade irá causar mais erros de segurança.

      A lista completa de prompts será algo parecido com isto:

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Example
      Locality Name (eg, city) [Default City]:Example 
      Organization Name (eg, company) [Default Company Ltd]:Example Inc
      Organizational Unit Name (eg, section) []:Example Dept
      Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
      Email Address []:[email protected]
      

      Ambos os arquivos que você criou serão colocados nos subdiretórios apropriados em /etc/ssl.

      Em seguida, atualizaremos nossa configuração do Apache para usar o novo certificado e chave.

      Passo 3 — Configurando o Apache para usar SSL

      Agora que temos nosso certificado auto-assinado e a chave disponíveis, precisamos atualizar nossa configuração do Apache para usá-los. No Ubuntu, você pode colocar novos arquivos de configuração do Apache (eles devem terminar em .conf) dentro de /etc/apache2/sites-available/ e eles serão carregados da próxima vez que o processo do Apache for recarregado ou reiniciado.

      Para este tutorial, criaremos um novo arquivo de configuração mínima. (Se você já tiver um Apache <Virtualhost> configurado e apenas precisar adicionar SSL a ele, você provavelmente precisará copiar as linhas de configuração que começam com SSL, e mudar a porta do VirtualHost de 80 para 443. Cuidaremos da porta 80 no próximo passo.)

      Abra um novo arquivo no diretório /etc/apache2/sites-available:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Cole nele a seguinte configuração mínima do VirtualHost:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:443>
         ServerName your_domain_or_ip
         DocumentRoot /var/www/your_domain_or_ip
      
         SSLEngine on
         SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
         SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      </VirtualHost>
      
      

      Certifique-se de atualizar a linha ServerName para o que você pretende endereçar ao seu servidor. Isso pode ser um nome de host, nome de domínio completo, ou um endereço IP. Verifique se o que você escolhe corresponde ao Common Name que você escolheu ao criar o certificado.

      As linhas restantes especificam um diretório DocumentRoot a partir do qual serão apresentados os arquivos e as opções SSL necessárias para apontar o Apache para nosso certificado e chave recém-criados.

      Agora, vamos criar nosso DocumentRoot e colocar um arquivo HTML nele apenas para fins de teste:

      • sudo mkdir /var/www/your_domain_or_ip

      Abra um novo arquivo index.html com seu editor de texto:

      • sudo nano /var/www/your_domain_or_ip/index.html

      Cole o seguinte no arquivo em branco:

      /var/www/your_domain_or_ip/index.html

      <h1>it worked!</h1>
      

      Este não é um arquivo HTML completo, claro, mas os navegadores são flexíveis e isso será suficiente para verificar nossa configuração.

      Salve e feche o arquivo. Em seguida, precisamos habilitar o arquivo de configuração com a ferramenta a2ensite:

      • sudo a2ensite your_domain_or_ip.conf

      Em seguida, vamos testar à procura de erros de configuração:

      • sudo apache2ctl configtest

      Se tudo for bem-sucedido, você receberá um resultado que se parecerá com este:

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      A primeira linha é apenas uma mensagem informando que a diretiva ServerName não está definida globalmente. Se você quiser se livrar dessa mensagem, você pode definir ServerName como o nome de domínio do seu servidor ou o endereço IP em /etc/apache2/apache2.conf. Isso é opcional, uma vez que a mensagem não causará problemas.

      Se seu resultado tiver Syntax OK nele, seu arquivo de configuração não possui erros de sintaxe. Podemos recarregar com segurança o Apache para implementar nossas alterações:

      • sudo systemctl reload apache2

      Agora, carregue seu site em um navegador, garantindo usar https:// no início.

      Você deve ver um erro. Isso é normal para um certificado auto-assinado! O navegador está lhe alertando que ele não pode verificar a identidade do servidor, pois nosso certificado não é assinado por nenhuma das suas autoridades certificadoras conhecidas. Para fins de teste e uso pessoal, isso está ok. Você deve ser capaz de clicar em avançado ou obter mais informações e optar por prosseguir.

      Depois que fizer isso, o navegador irá carregar it worked! como mensagem.

      Nota: se seu navegador não se conectar ao servidor, certifique-se de que sua conexão não esteja sendo bloqueada por um firewall. Se você estiver usando o ufw, os seguintes comandos abrirão as portas 80 e 443:

      • sudo ufw allow "Apache Full"

      Em seguida, adicionaremos outra seção VirtualHost à nossa configuração para atender requisições HTTP simples e redirecioná-las ao HTTPS.

      Passo 4 — Redirecionando HTTP para HTTPS

      Atualmente, nossa configuração irá responder apenas às requisições HTTPS na porta 443. É uma boa prática também responder na porta 80, mesmo que você queira forçar todo o tráfego a ser criptografado. Vamos configurar um VirtualHost para responder a essas requisições não criptografadas e redirecioná-las para HTTPS.

      Abra o mesmo arquivo de configuração do Apache que iniciamos nos passos anteriores:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Ao final, crie outro bloco VirtualHost para corresponder às requisições na porta 80. Use a diretiva ServerName para corresponder novamente ao seu nome de domínio ou endereço IP. Em seguida, use Redirect para corresponder a quaisquer requisições e enviá-las para o VirtualHost SSL. Certifique-se de incluir a barra final:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:80>
          ServerName your_domain_or_ip
          Redirect / https://your_domain_or_ip/
      </VirtualHost>
      

      Salve e feche este arquivo quando você tiver terminado, então teste sua sintaxe de configuração novamente e recarregue o Apache:

      • sudo apachectl configtest
      • sudo systemctl reload apache2

      Você pode testar a nova funcionalidade de redirecionar visitando seu site com o http:// simples em frente ao endereço. Você deve ser redirecionado para https:// automaticamente.

      Conclusão

      Agora, você configurou o Apache para atender requisições criptografadas usando um certificado SSL auto-assinado, e para redirecionar requisições HTTP não criptografadas para HTTPS.

      Se você estiver planejando usar SSL para um site público, você deve procurar comprar um nome de domínio e usar uma autoridade certificadora amplamente suportada, como o Let’s Encrypt.

      Para obter mais informações sobre o uso do Let’s Encrypt com o Apache, leia nosso tutorial How To Secure Apache with Let’s Encrypt on Ubuntu 20.04.



      Source link

      Создание самоподписанных сертификатов SSL для Apache в Ubuntu 20.04


      Введение

      TLS или протокол безопасности транспортного уровня и предшествующий ему протокол SSL используются для заключения обычного трафика в защищенную оболочку с шифрованием. Используя эту технологию, серверы могут безопасно отправлять информацию клиентам без перехвата сообщений и их прочтения третьей стороной.

      В этом руководстве мы покажем, как создать и использовать самоподписанный сертификат SSL с веб-сервером Apache в Ubuntu 20.04.

      Примечание. Самоподписанный сертификат шифрует связь между вашим сервером и любыми клиентами. Однако поскольку он не подписан доверенным центром сертификации, входящим в базовый комплект поставки браузеров и операционных систем, пользователи не могут использовать этот сертификат для автоматической проверки подлинности вашего сервера. В результате этого ваши пользователи увидят ошибку безопасности при посещении вашего сайта.

      Из-за этого ограничения самоподписанные сертификаты не подходят для производственной среды, предназначенной для широкой публики. Они обычно используются для тестирования или защиты некритичных сервисов, используемых одиночными пользователями или небольшими группами пользователей, которые могут добавлять сертификат в список доверенных через альтернативные каналы.

      Чтобы получить более подходящий для производственной среды готовый сертификат, воспользуйтесь бесплатным центром сертификации Let’s Encrypt. Чтобы узнать, как загрузить и настроить сертификат Let’s Encrypt, воспользуйтесь нашим обучающим модулем «Защита Apache с помощью Let’s Encrypt в Ubuntu 20.04».

      Предварительные требования

      Для прохождения этого обучающего модуля вам потребуется следующее:

      • Доступ к серверу Ubuntu 20.04 с пользователем без прав root с привилегиями sudo. Наше «Руководство по начальной настройке сервера Ubuntu 20.04» рассказывает о том, как создать такого пользователя.
      • Также вам потребуется установить Apache. Вы можете установить Apache с помощью apt. Для начала обновите локальный индекс пакетов, чтобы отразить последние обновления:

      Затем установите пакет apache2:

      Если вы используете брандмауэр ufw, откройте порты http и https:

      • sudo ufw allow "Apache Full"

      После выполнения этих шагов убедитесь, что вы вошли в систему в качестве пользователя без прав root, и продолжите работу с этим руководством.

      Шаг 1 — Активация mod_ssl

      Прежде чем использовать любые сертификаты SSL, нам необходимо активировать модуль Apache mod_ssl, который предоставляет поддержку шифрования SSL.

      Активируйте mod_ssl с помощью команды a2enmod:

      Перезапустите Apache для активации модуля:

      • sudo systemctl restart apache2

      Теперь модуль mod_ssl активирован и готов к использованию.

      Шаг 2 – Создание сертификата SSL

      Теперь Apache готов использовать шифрование, и мы можем переходить к генерированию нового сертификата SSL. Сертификат будет хранить определенную базовую информацию о вашем сайте и будет сопровождаться файлом ключа, который позволяет серверу безопасно обрабатывать шифрованные данные.

      Мы можем создать ключ SSL и файлы сертификата с помощью команды openssl:

      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

      После ввода команды откроется диалоговое окно, где вы можете ввести информацию о своем сайте. Прежде чем перейти к этому шагу, посмотрим, что делает отправляемая нами команда:

      • openssl: это инструмент командной строки, предназначенный для создания сертификатов, ключей и других файлов OpenSSL и управления ими.
      • req -x509: указывает, что мы хотим использовать управление запросами на подписание сертификатов X.509 (CSR). X.509 — это инфраструктура открытых ключей, используемая стандартами SSL и TLS для управления ключами и сертификатами.
      • -nodes: предписывает OpenSSL пропустить опцию защиты нашего сертификата кодовой фразой. Для чтения этого файла при запуске сервера без вмешательства пользователя нам потребуется Apache. Кодовая фраза предотвратит это, поскольку в ином случае нам пришлось бы вводить ее после каждого перезапуска.
      • -days 365: эта опция устанавливает период действия сертификата. Здесь мы устанавливаем срок действия в один год. Многие современные браузеры отклоняют любые сертификаты, срок действия которых превышает один год.
      • -newkey rsa:2048: указывает, что мы хотим сгенерировать новый сертификат и новый ключ одновременно. Мы не создали требуемый ключ для подписи сертификата на предыдущем шаге, и поэтому нам нужно создать его вместе с сертификатом. Часть rsa:2048 предписывает создать ключ RSA длиной 2048 бит.
      • -keyout: эта строка указывает OpenSSL, где разместить генерируемый файл закрытого ключа.
      • -out: указывает OpenSSL, где разместить создаваемый сертификат.

      Укажите подходящие ответы. Наиболее важная строка — это та, которая запрашивает Common Name. Вам нужно ввести имя хоста, которое вы будете использовать для доступа к серверу, или публичный IP-адрес сервера. Важно, чтобы значение в этом поле совпадало с вводимыми в адресную строку браузера данными для доступа к сайту, поскольку несоответствие приведет к дополнительным ошибкам безопасности.

      Полный список диалогов будет выглядеть примерно так:

      Country Name (2 letter code) [XX]:US
      State or Province Name (full name) []:Example
      Locality Name (eg, city) [Default City]:Example 
      Organization Name (eg, company) [Default Company Ltd]:Example Inc
      Organizational Unit Name (eg, section) []:Example Dept
      Common Name (eg, your name or your server's hostname) []:your_domain_or_ip
      Email Address []:[email protected]
      

      Оба созданных вами файла будут помещены в соответствующие подкаталоги в каталоге /etc/ssl.

      Затем мы обновим конфигурацию Apache для использования нового сертификата и ключа.

      Шаг 3 — Настройка Apache для использования SSL

      Мы подготовили самоподписанный сертификат и ключ, и теперь нам нужно обновить конфигурацию Apache для их использования. В Ubuntu вы можете поместить новые файлы конфигурации Apache (они должны иметь расширение .conf) в каталог /etc/apache2/sites-available/, и они будут загружены при следующей перезагрузке или перезапуске процесса Apache.

      Для этого обучающего модуля мы создадим новый файл с минимальной конфигурацией. Если вы уже настроили Apache <Virtualhost>, и вам просто нужно добавить SSL, вы можете просто скопировать строки конфигурации, начинающиеся с SSL, и переключить порт VirtualHost с 80 на 443. Мы займемся портом 80 на следующем шаге.)

      Откройте новый файл в каталоге /etc/apache2/sites-available:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Вставьте в него следующую минимальную конфигурацию VirtualHost:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:443>
         ServerName your_domain_or_ip
         DocumentRoot /var/www/your_domain_or_ip
      
         SSLEngine on
         SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
         SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
      </VirtualHost>
      
      

      Обновите строку ServerName, указав предполагаемое имя для обращения к вашему серверу. Это может быть имя хоста, полное доменное имя или IP-адрес. Убедитесь, что выбранное имя соответствует параметру Common Name, выбранному при создании сертификата.

      В остальных строках указываются каталог DocumentRoot для выдачи файлов, а также опции SSL, необходимые для указания Apache созданных нами сертификата и ключа.

      Создадим каталог DocumentRoot и поместим в него файл HTML для целей тестирования:

      • sudo mkdir /var/www/your_domain_or_ip

      Откройте новый файл index.html в текстовом редакторе:

      • sudo nano /var/www/your_domain_or_ip/index.html

      Вставьте в пустой файл следующее:

      /var/www/your_domain_or_ip/index.html

      <h1>it worked!</h1>
      

      Разумеется, это не полный файл HTML, однако требования браузеров не настолько строги, и этого будет достаточно для проверки нашей конфигурации.

      Сохраните и закройте файл. После этого нам нужно активировать файл конфигурации с помощью инструмента a2ensite:

      • sudo a2ensite your_domain_or_ip.conf

      Затем проверим ошибки конфигурации:

      • sudo apache2ctl configtest

      Если проверка будет успешно пройдена, мы получим результат, выглядящий примерно так:

      Output

      AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message Syntax OK

      Первая строка — это сообщение о том, что директива ServerName не задана глобально. Если вы хотите избавиться от этого сообщения, вы можете задать для ServerName доменное имя вашего сервера или IP-адрес в каталоге /etc/apache2/apache2.conf. Это необязательно, потому что данное сообщение не наносит никакого вреда.

      Если в результатах есть сообщение Syntax OK, в вашей конфигурации нет синтаксических ошибок. Мы можем безопасно перезагрузить Apache для внесения изменений:

      • sudo systemctl reload apache2

      Теперь загрузите свой сайт в браузере, добавив префикс https://.

      Вы должны увидеть сообщение об ошибке. Для самоподписанных сертификатов это нормально! Браузер предупреждает вас, что не может проверить подлинность сервера, поскольку наш сертификат не подписан известным браузеру центром сертификации. Для целей тестирования и личного использования этого достаточно. У вас должна быть возможность нажать кнопку «Дополнительно» или «Подробности» и продолжить.

      После этого браузер загрузит страницу с сообщением it worked!.

      Примечание. Если ваш браузер не подключается к серверу, убедитесь, что соединение не блокируется брандмауэром. Если вы используете ufw, следующие команды откроют порты 80 и 443:

      • sudo ufw allow "Apache Full"

      Затем мы добавим в нашу конфигурацию другой раздел VirtualHost для обслуживания простых запросов HTTP и их перенаправления в HTTPS.

      Шаг 4 — Перенаправление HTTP в HTTPS

      Сейчас наша конфигурация отвечает только на запросы HTTPS через порт 443. Также рекомендуется открыть для ответов и порт 80, даже если вы хотите принудительно шифровать весь трафик. Настроим VirtualHost для реагирования на незашифрованные запросы и их перенаправления в HTTPS.

      Откройте файл конфигурации Apache, созданный нами на предыдущих шагах:

      • sudo nano /etc/apache2/sites-available/your_domain_or_ip.conf

      Создайте в конце файла еще один блок VirtualHost для запросов через порт 80. Используйте директиву ServerName для привязки вашего доменного имени или IP-адреса. Затем используйте Redirect для перенаправления всех запросов на SSL VirtualHost. Не забудьте добавить косую черту в конце:

      /etc/apache2/sites-available/your_domain_or_ip.conf

      <VirtualHost *:80>
          ServerName your_domain_or_ip
          Redirect / https://your_domain_or_ip/
      </VirtualHost>
      

      После завершения правок сохраните и закройте файл, снова протестируйте синтаксис конфигурации и перезагрузите Apache:

      • sudo apachectl configtest
      • sudo systemctl reload apache2

      Вы можете протестировать новую функцию переадресации, посетив ваш сайт, введя адрес с префиксом http://. Вы должны быть автоматически перенаправлены на адрес https://.

      Заключение

      Вы настроили Apache для обслуживания шифрованных запросов с использованием самоподписанного сертификата SSL и перенаправления нешифрованных запросов HTTP на адрес HTTPS.

      Если вы планируете использовать SSL для общедоступного сайта, вам следует приобрести доменное имя и использовать широко поддерживаемый центр сертификации, например, Let’s Encrypt.

      Дополнительную информацию об использовании Let’s Encrypt с Apache можно получить в обучающем модуле «Защита Apache с помощью Let’s Encrypt в Ubuntu 20.04».



      Source link