美文网首页
ubuntu服务器+apache2+letsencrypt+ss

ubuntu服务器+apache2+letsencrypt+ss

作者: stephen__liu | 来源:发表于2018-07-18 23:28 被阅读0次

    关于ubuntu服务器+apache2 组合配置网站免费ssl : letsencrypt 在网上找了很多资料,东拼西凑最终解决了问题,这里讲过程记录下来,方便后续查阅,也方便又需要的同仁。

    在介绍具体的配置之前我们先简单了解下ubuntu系统(不同的linux系统可能存在细微差别)下Apache 配置目录和文件。
    /etc/apache2 是存放所有apache相关配置文件的地方,一个最核心的文件就是 apache2.conf, 简单看下该文件的核心配置:

    # Include module configuration:
    IncludeOptional mods-enabled/*.load
    IncludeOptional mods-enabled/*.conf
    
    # Include list of ports to listen on
    Include ports.conf
    
    # access here, or in any related virtual host.
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
    </Directory>
    
    <Directory /usr/share>
        AllowOverride None
        Require all granted
    </Directory>
    
    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    
    <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
    </Directory>
    
    AccessFileName .htaccess
    
    # Include generic snippets of statements
    IncludeOptional conf-enabled/*.conf
    
    # Include the virtual host configurations:
    IncludeOptional sites-enabled/*.conf
    

    这是我从我的ubuntu服务器上拷贝出来的,这个conf文件相对于其他linux系统的httpd.conf要简短得多,因为它把一些模块声明文件和配置文件分散到了其它目录了,比如它包含了mods-enabled目录下所有的.load文件和.conf配置文件。所以如果我们要修改具体的配置和开启/禁用某些模块加载可能就需要先找到对应的文件才行,这也是很多新手比较头疼的地方。

    /etc/apache2/ports.conf  端口监听配置
    /etc/apache2/mods-available/ssl.load  ssl加载模块
    /var/www/html/.htaccess  网站全局跳转配置
    

    如果想了解letsencrypt 可以看他们的网站:https://letsencrypt.org/ 免费ssl,目前了解到证书有效期是90天,90天后需要重新跑这个流程,当然续期有些操作可以省掉。

    1. 首先第一步安装 letsencrypt :

    sudo apt-get install letsencrypt

    2. 生成证书:

    letsencrypt certonly --renew-by-default --email yumysoft@gmail.com -d yumysoft.com -d www. yumysoft.com
    certonly 表示只颁发证书
    --email : 你的邮箱地址
    -d : 指定希望应用https的网站地址,可以同时制定多个

    执行命令后会出如下提示:


    20160328141422096.png

    点击ok,正常情况下会提示:

    Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/domain.com/fullchain.pem...
    

    说明证书生成成功,默认会保存在/etc/letsencrypt/live/domain.com 目录下.

    3. 使用证书:

    找到ssl配置文件配置VirtualHost,这个在ubuntu 系统下有点特殊,网上找到的资料基本说了ssl.conf, httpd-ssl.conf 这几个文件都没有找到,通过摸索,发现apache端口定义都放在 /etc/apache2/ports.conf文件中:

    # If you just change the port or add more ports here, you will likely also
    # have to change the VirtualHost statement in
    # /etc/apache2/sites-enabled/000-default.conf
    Listen 80
    
    <IfModule ssl_module>
            Listen 443
    </IfModule>
    

    而且这个文件头部明显说明了配置VirtualHost的地方在/etc/apache2/sites-enabled/000-default.conf这个文件去配置, 所有找到这个文件,我吗看到了80端口的监听配置,在后面追加如下443端口配置:

    <VirtualHost *:443>
    DocumentRoot "/var/www/html"
    ServerName www.yumysoft.com
    ServerAlias yumysoft.com
    SSLEngine on
    SSLProtocol TLSv1 TLSv1.1 TLSv1.2
    SSLCertificateFile /etc/letsencrypt/live/yumysoft.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/yumysoft.com/privkey.pem
    </VirtualHost>
    

    目前实测,配置这些参数已经可以实现ssl安全访问网站,更多更全参数参考如下:

    <VirtualHost *:443> 
     DocumentRoot "C:/phpstudy/WWW" 
     ServerName www.youdomain.cn 
     ServerAlias youdomain.cn 
     SSLEngine on 
     SSLProtocol TLSv1 TLSv1.1 TLSv1.2 
     SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 
     SSLCertificateFile "C:/phpstudy/Apache/conf/2_www.youdomain.cn.crt" 
     SSLCertificateKeyFile "C:/phpstudy/Apache/conf/3_www.youdomain.cn.key" 
     SSLCertificateChainFile "C:/phpstudy/Apache/conf/1_root_bundle.crt" 
     
     <Directory "C:/phpstudy/WWW/> 
     Options FollowSymLinks ExecCGI 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
     Require all granted 
     </Directory> 
    </VirtualHost> 
    

    从其他地方拷贝过来的,具体效果可自行研究验证.

    重启apache

    配置完后,重启apache:
    service apache2 restart

    done, perfect!!!

    错误解决:

    在执行apache重启命令的时候可能碰到如下错误提醒:

    Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
    

    导致这个问题是因为没有启用ssl模块,执行如下命令重启apache可解决问题:

    a2enmod ssl
    service apache2 restart
    

    关于http自动跳转https

    我们可能还希望用户在输入http浏览时自动重定向到https安全服务, 首先启动重定向:

    sudo a2enmod rewrite 
    或者
    sudo ln -s /etc/apache2/mods-available/rewrite.load  /etc/apache2/mods-enabled/rewrite.load
    

    有以下几种做法:

    1. 修改网站跟目录 .htaccess文件,实现自动跳转, 一般wordpress网站会有一个默认配置
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteBase / 
        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^.* https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    </IfModule>
    
    1. 修改 /etc/apache2/apache2.conf 文件:
    <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
            RewriteEngine On
            RewriteCond %{SERVER_PORT} 80
            RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]
    </Directory>
    
    1. 打开 /etc/apache2/sites-available/000-default.conf

    在 <\VirtualHost *:80><\VirtualHost> 标签内随便一个地方加入以下三行

    RewriteEngine on
    RewriteCond   %{HTTPS} !=on
    RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]
    

    more...

    到最后发现有的文章指出可以通过certbot工具在生成证书的时候制定生成ssl.conf文件,如下:

    certbot-auto certonly --apache --apache-le-vhost-ext/etc/httpd/conf.d/ssl.conf -d mj.AA.com.cn -d game.aa.com.cn
    

    效果如何,待君验证

    参考资料:### 征服 Apache + SSL
    ubuntu16.04服务器apache的ssl证书配置
    https://docs.woocommerce.com/document/ssl-and-https/

    相关文章

      网友评论

          本文标题:ubuntu服务器+apache2+letsencrypt+ss

          本文链接:https://www.haomeiwen.com/subject/rjzapftx.html