現在互聯網基本都趨向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時,卻不做任何重定向