ubuntu中apache的ssl证书配置及url重写

现在互联网基本都趋向https访问,那么如何配置证书呢,如何将http访问自动转向https访问呢,如何避免部分访问仍保留http访问呢?

一、https原理

  借用网上的图(图片来源: https://www.cnblogs.com/xiohao/p/9054355.html ),用到了对称加密和非对称加密.

     

 

 

 二、ubuntu的apache中ssl证书配置

  我们得到的证书一般为以下三个文件

  •   xx.cn.key
  •   xx.cn_chain.crt
  •   xx.cn_public.crt

    网上有很多配置方法,本人只讲自己最习惯的方法

     1 合并xx.cn_public.crt和xx.cn_chain.crt 文件,生成 xx.cn.pem文件, 注意: public的内容在上面,然后在下一行开始chain,如下

  

 

 

 

 

    

     2 配置ssl模块

sudo a2enmod ssl  

 

   

     3 在我们的虚拟主机配置文件 xx.conf (目录在/etc/apache2/sites-available/)下部分添加配置,如下     

  

 

 

 

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName www.xx.cn
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/xx/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on
        SSLCertificateFile      /etc/apache2/cert/minimgr/xx.cn.pem
        SSLCertificateKeyFile /etc/apache2/cert/minimgr/xx.cn.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
</VirtualHost>
</IfModule>

     4 重启apache

 

sudo service apache2 restart

 

 

   到此,我们的ssl证书就配置完成了,在浏览器输入https://www.xx.cn即可正常访问

 

 

  三、url重写

 

 

  ① 如果我们想要直接输入www.xx.cn便可以自动访问https://www.xx.cn,免得每次输入https特别麻烦,怎么办呢?

     直接修改上述 xx.conf 文件(80+443端口虚拟主机配置文件,目录在/etc/apache2/sites-available/). 在80端口的配置部分最下方,添加如下

  

 

 

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

   这样,我们就能实现http自动转向https,当我们输入www.xx.cn便可以自动访问https://www.xx.cn.

 

 

 

  ② 如果我们希望我们的某个页面不会自动转https时,比如我们实行了计划任务,在本机每2分钟访问一次www.xx.cn/sync.php,我们完全信任这次访问,没必要用https(https更消耗资源),那么我们

对此访问增加例外,操作如下

 

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

 

     这里进行说明的是, RewriteCond条件在不申明的情况下为and关系,当需要用到or关系时,需要在末尾加 [OR]

     这时,当我们访问www.xx.cn便可以自动访问https://www.xx.cn.而当我们访问www.xx.cn/sync.php时,却不做任何重定向

 

  

  

发布了16 篇原创文章 · 获赞 0 · 访问量 1910
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章