在Ubuntu 16.04上,配置Apache With自签名tls/ssl证书

・7 分钟阅读

SSL和它的后继者TLS (安全套接字层/传输层安全性)在客户端和服务器之间添加一层加密,如果没有这个技术,数据将以纯文本方式发送到服务器,第三方可以读取你的服务器所有发送和接收的信息。

本教程会教你如何创建SSL/TLS证书,并且在16.04上的Apache 2.4上激活它,我假设Apache已经设置并运行,如果你想了解如何安装LAMP堆栈,请参阅此文档

注意

SSL/TLS证书通常由可信的CA (证书颁发机构)生成,通过自己生成它,你自己将成为签名者,这意味着浏览器无法验证证书的身份是否应该被信任,并且它将警告用户。尽管可以绕过此警报,但是,面向公众的站点应使用由受信任CA签名的证书。Let's encrypt提供免费证书的CA ,在这里你可以了解如何在Apache和Ubuntu 16.04中安装它们的证书 。

对于内部应用程序,使用自签名证书有效,尤其在没有域名的情形。


步骤1:生成证书

  1. 首先,让我们创建一个存放文件的地方。

    
    mkdir ~/certificates
    cd ~/certificates
    
    
  2. 生成CSR和私钥。

    
    openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
    
    

    它将询问证书请求的信息,用适当的信息完成。

    
    Country Name (2 letter code) [AU]: US
    State or Province Name (full name) [Some-State]: FL
    Locality Name (eg, city) []: Miami
    Organization Name (eg, company) [My Company]: My Company
    Organizational Unit Name (eg, section) []:
    
    

    公用名称应该是你的域名或服务器地址的IP ,同时,填写你的电子邮件。

    
    Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122
    Email Address []:webmaster@example.com
    
    
  3. 现在,将证书移动到Apache配置文件夹。

    
    mkdir /etc/apache2/ssl
    mv ~/certificates/* /etc/apache2/ssl/.
    
    
  4. 证书已经准备好了,接下来我们会让Apache来处理证书,

步骤2:防火墙配置

  1. 我们必须确保TCP端口443打开。 在本教程中我们将使用UFW

  2. 确保UFW已启用。

     
    sudo ufw enable
    
     
  3. 现在允许防火墙的预定义的Apache设置。

    
    sudo ufw allow 'Apache Full'
    
    
  4. 通过键入"sudo ufw status",你可以看到当前规则的列表,你的配置应类似于:

    
    To Action From
    -- ------ ----
    Apache Full ALLOW Anywhere
    OpenSSH ALLOW Anywhere
    Apache Full (v6) ALLOW Anywhere (v6)
    OpenSSH (v6) ALLOW Anywhere (v6)
    
    
  5. 你还应该允许OpenSSH在未来的连接。

    
    sudo ufw allow 'OpenSSH'
    
    

步骤3:Apache虚拟主机配置

  1. 导航到默认的Apache站点配置目录。

    
    sudo nano /etc/apache2/sites-available/default-ssl.conf
    
    
  2. 此文件告诉服务器在哪里查找SSL证书,删除注释后,它应该类似于下面的配置。

    
    <IfModule mod_ssl.c>
     <VirtualHost _default_:443>
     ServerAdmin webmaster@localhost
    
     DocumentRoot /var/www/html
    
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
    
     SSLEngine on
    
     SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
     SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
    
     <FilesMatch".(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
     </FilesMatch>
     <Directory /usr/lib/cgi-bin>
     SSLOptions +StdEnvVars
     </Directory>
    
     </VirtualHost>
    </IfModule>
    
    
  3. 编辑这一行:

    
    ServerAdmin email@example.net
    
    
  4. ServerAdmin行下面添加以下内容:

    
    ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
    
    
  5. 现在,使用我们的证书位置编辑这些行:

    
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key
    
    
  6. 我们的最终文件应该类似于:

    
    <IfModule mod_ssl.c>
     <VirtualHost _default_:443>
     ServerAdmin email@example.net
     ServerName 203.0.113.122
    
     DocumentRoot /var/www/html
    
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined
    
     SSLEngine on
    
     SSLCertificateFile /etc/apache2/ssl/apache.crt
     SSLCertificateKeyFile /etc/apache2/ssl/apache.key
    
     <FilesMatch".(cgi|shtml|phtml|php)$">
     SSLOptions +StdEnvVars
     </FilesMatch>
     <Directory /usr/lib/cgi-bin>
     SSLOptions +StdEnvVars
     </Directory>
    
     </VirtualHost>
    </IfModule>
    
    
  7. 保存并关闭文件。

步骤4启用Apache SSL模块

  1. 通过键入以下命令启用SSL模块:

     
    sudo a2enmod ssl
    
     
  2. 现在启用我们刚才编辑的站点:

    
    sudo a2ensite default-ssl.conf
    
    
  3. 重启apache:

    
    sudo service apache2 restart
    
    
  4. 让我们进入新的安全网站!在浏览器(请确定你键入了https:// )中打开。

    
    https://YOUR_SERVER_IP
    
    

正如我们所料,你的浏览器会警告你证书无效,这是因为证书没有签名。

步骤5:将所有HTTP流量重定向到HTTPS可选

  1. 打开Apache默认虚拟主机文件:

    
    nano /etc/apache2/sites-available/000-default.conf
    
    
  2. <VirtualHost *:80>标记中添加此行:

    
    Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
    
    
  3. 重新加载Apache配置:

    
    sudo service apache2 reload
    
    

所有网站流量现在会自动重定向到HTTPS 。

Hrh profile image