环境:ubuntu 6.06, Apache 2.0.55
第一步:生成ssl certficate文件
首先当然是正常安装apache2了,然后:
sudo apache2-ssl-certificate
生成一个1024位的RSA私钥,并保存为/etc/apache2/ssl/apache.pem,如果你已经有了CA证书,应该也是可以拿过来直接使用,或者用来生成这个私钥的(这应该属于另外一个话题了,我也没有用过)。
apache2-ssl-certificate执行过程中要回答一些问题,如下,注意如果[]里已经给出了默认值,而你又想把这项置空的话,可以输入英文句号“.”:
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和实际的网站域名还是保持一致比较方便。
第二步:启用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
第三步:添加监听端口,配置虚拟主机
添加端口:在/etc/apache2/ports.conf中增加一行“Listen 443”,显然,如果你想让默认的80端口就使用ssl的话,就可以省略这一步了,并在后面的配置中略微调整。
在apache虚拟主机的配置文件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访问网站了。
如果想配置成80端口默认就使用https,首先不需要在ports.conf中添加443端口的监听了,其次是在配置VirtualHost的时候也不用带上:443了,但即使这样,配置完成后使用http://www.domain.com访问配置好的网站时,还是会提示:
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协议去访问一个https的端口造成的,最简单的解决方法是使用https://www.domain.com:80/来替代,不过,通过修改apache配置,把到80端口的http访问重定向到443端口的https访问效果会更好一些,就像下面的配置:
NameVirtualHost *:80
<VirtualHost *:80>
Redirect permanent / https://localhost/
NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin Fwolf
ServerName www.fwolf.com
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
…
这样所有http访问就自动被重定向到https访问上了,不过如果你只能在外网开一个端口的话就比较麻烦了,同时https也只能包含一个站点(无法通过ServerName辨识多个站点)。
如果能够把http和https协议同时绑定到一个端口上,用户访问的时候似乎就更方便了,不过很多地方都说这是不可能的,加密与明文协议不可能同时存在于一个端口上,这里有个讨论给出了一种方案,虽然经过我的实验并不成功,还是把代码贴出来,供有兴趣的朋友继续研究。
<IfDefine !SSL>
RewriteEngine on
RewriteCond %{HTTPS} != on
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=permanent]
</IfDefine>
一个小问题:我生成的pem文件怎么有效期都只有一个月?难道这是默认的?pem文件到期之后会发生什么事情呢?
update @ 20070126
默认生成的pem文件确实只有一个月的有效期,过期之后倒是还能使用,只是在客户端会有一个提示证书无效的确认,所以在生成证书的时候,记得用-day x参数指定有效期限,比如十年什么的。
sudo apache2-ssl-certificate –force -days 3650
(当pem文件已经存在的时候,需要使用–force参数指定覆盖)
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
如何借助应用份认证模块和.htaccess文件保证Web安全
要限制对一个网页的访问,可使用Apache和第三方提供的身份认证模块和方法来验证用户的凭据(如用户名和密码。本文介绍如何应用份认证模块和.htaccess文件来保护Web安全。
-
Apache Web服务器安全最佳实践
在Linux上安装安全的Web服务器并加以维护并非易事,这需要深入了解Linux、Apache和PHP服务器端的选项。本文介绍一些方法,涵盖服务器配置,PHP设置微调等诸多方面。
-
如何使用SSL协议以确保web服务通信安全?(上)
Apache服务器与客户端的通信是明文方式,很多通过HTTP协议传送数据的应用将受到黑客的威胁,信息的安全性难以得到保障。
-
Linux下常用监控cacti的安装和配置(附图)
本文介绍了Linux下常用监控cacti的架构、工作流程安装和配置的具体操作步骤,对操作命令做了详细注释说明易学易懂……