第一步:生成ssl certficate文件 首先當(dāng)然是正常安裝apache2了,然后:
HTTPS改造
sudo apache2-ssl-certificate
生成一個1024位的RSA私鑰,并保存為/etc/apache2/ssl/apache.pem,如果你已經(jīng)有了CA證書,應(yīng)該也是可以拿過來直接使用,或者用來生成這個私鑰的(這應(yīng)該屬于另外一個話題了,我也沒有用過)。
apache2-ssl-certificate執(zhí)行過程中要回答一些問題,如下,注意如果[]里已經(jīng)給出了默認(rèn)值,而你又想把這項(xiàng)置空的話,可以輸入英文句號“.”:
Country Name (2 letter code) [GB]:US State or Province Name (full name) [Some-State]:. Locality Name (eg, city) []: Organization Name (eg, company; recommended) []:. Organizational Unit Name (eg, section) []:. server name (eg. ssl.domain.tld; required!!!) []:localhost Email Address []:fwolf@mail.com
一般來說,server name和實(shí)際的網(wǎng)站域名還是保持一致比較方便。
第二步:啟用ssl mod
sudo a2enmod ssl
或者
:/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.conf ssl.conf :/etc/apache2/mods-enabled$ sudo ln -s ../mods-available/ssl.load ssl.load
第三步:添加監(jiān)聽端口,配置虛擬主機(jī) 添加端口:在/etc/apache2/ports.conf中增加一行“Listen 443”,顯然,如果你想讓默認(rèn)的80端口就使用ssl的話,就可以省略這一步了,并在后面的配置中略微調(diào)整。
在apache虛擬主機(jī)的配置文件conf中,段,添加SSL的定義,比如:
<VirtualHost *:443> ServerAdmin Fwolf ServerName www.fwolf.com SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem DirectoryIndex index.php index.html index.html.var
然后重啟apache,就能夠使用https訪問網(wǎng)站了。
如果想配置成80端口默認(rèn)就使用https,首先不需要在ports.conf中添加443端口的監(jiān)聽了,其次是在配置VirtualHost的時(shí)候也不用帶上:443了,但即使這樣,配置完成后使用http://www.seokuaipai.cn訪問配置好的網(wǎng)站時(shí),還是會提示:
Bad Request Your browser sent a request that this server could not understand. Reason: You’re speaking plain HTTP to an SSL-enabled server port. Instead use the HTTPS scheme to access this URL, please. Hint: https://www.fwolf.com/
這是由于使用http協(xié)議去訪問一個https的端口造成的,最簡單的解決方法是使用https://www.seokuaipai.cn:80/來替代,不過,通過修改apache配置,把到80端口的http訪問重定向到443端口的https訪問效果會更好一些,就像下面的配置:
NameVirtualHost *:80 <VirtualHost *:80> Redirect permanent / https://localhost/ </virtualhost> NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin Fwolf ServerName www.fwolf.com </virtualhost> SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem …
這樣所有http訪問就自動被重定向到https訪問上了,不過如果你只能在外網(wǎng)開一個端口的話就比較麻煩了,同時(shí)https也只能包含一個站點(diǎn)(無法通過ServerName辨識多個站點(diǎn))。
如果能夠把http和https協(xié)議同時(shí)綁定到一個端口上,用戶訪問的時(shí)候似乎就更方便了,不過很多地方都說這是不可能的,加密與明文協(xié)議不可能同時(shí)存在于一個端口上,這里有個討論給出了一種方案,雖然經(jīng)過我的實(shí)驗(yàn)并不成功,還是把代碼貼出來,供有興趣的朋友繼續(xù)研究。
<IfDefine !SSL> RewriteEngine on RewriteCond %{HTTPS} != on RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=permanent] </IfDefine>
一個小問題:我生成的pem文件怎么有效期都只有一個月?難道這是默認(rèn)的?pem文件到期之后會發(fā)生什么事情呢?
update @ 20070126
默認(rèn)生成的pem文件確實(shí)只有一個月的有效期,過期之后倒是還能使用,只是在客戶端會有一個提示證書無效的確認(rèn),所以在生成證書的時(shí)候,記得用-day x參數(shù)指定有效期限,比如十年什么的。
sudo apache2-ssl-certificate –force -days 3650
(當(dāng)pem文件已經(jīng)存在的時(shí)候,需要使用–force參數(shù)指定覆蓋)
參考: Need Apache2 SSL howto Apache2 SSL You’re speaking plain HTTP to an SSL-enabled server port. – HELP PLEASE !
Update @ 2007-07-31
Ubuntu 7.04 feisty中沒有apache2-ssl-cerfiticate這個命令,需要自己下載一個包,然后解壓,把里面的ssleay.cnf拷貝到/usr/share/apache2/,然后就可以執(zhí)行解壓的另外一個可執(zhí)行文件apache2-ssl-certificate來生成證書了。
以上文章來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系創(chuàng)一網(wǎng)的客服處理。謝謝!