在Linux上搭建SSL虚拟主机L.docx
《在Linux上搭建SSL虚拟主机L.docx》由会员分享,可在线阅读,更多相关《在Linux上搭建SSL虚拟主机L.docx(17页珍藏版)》请在冰点文库上搜索。
在Linux上搭建SSL虚拟主机L
在本文的下篇这一部分里,我们将进一步探讨Apache服务器的配置使用——实际上IBMHTTPServer也只是对Apache服务器改良而成,所以基本的配置使用也是一致的。
六、虚拟主机的设置
Apache支持两种类型的虚拟主机,基于IP地址的虚拟主机和基于名称的虚拟主机。
不管是选择哪种类型的虚拟主机,先决条件是要配置正确的域名服务(DNS)。
基于IP的虚拟主机配置要求每个虚拟主机都有唯一的IP地址;而基于名称的虚拟主机使用CNAME记录建立(在顶级域名一样的情况下)或者另外一个域名服务中的A记录(在顶级域名不一样的情况下)。
可以以两种方式配置Apache,以便支持多主机(主服务器和虚拟服务器):
·运行多个守护进程,每个主机具有一个单独的httpd守护进程。
·运行单个守护进程支持所有的虚拟主机和主服务器主机。
第二种方法被广泛的采用,并在大多数情况下是首选方案。
因此,本节只讨论这一种方法。
Apache在httpd.conf文件中使用特殊的容器来处理所有与虚拟主机有关的设置。
一个最小的虚拟主机设置可能如下所示:
DocumentRoot/home/httpd/
ServerName
中的指令条目将重载或者补充(由命令本身的性质而定)主服务器中给定的设置,并只适应该虚拟主机。
主服务器可以不提供任何WWW服务,所有的服务请求都由虚拟主机来处理。
当然,你还可以设定你侦听的IP地址的端口,格式为:
设置实现基于IP地址的虚拟主机服务
◆实现前提
这种方式需要在系统中设置IP别名,也就是在一台机器的网卡上绑定多个IP地址去为多个虚拟主机服务。
而且要使用这项功能还要确定在你的LINUX内核中必须支持IP别名的设置,否则你还必须重新编译内核。
◆配置步骤
假设,我们用来实现虚拟主机服务的机器,首先已经为自己提供了WEB服务,现在将为另一个域名提供虚拟主机服务。
规划IP地址:
为虚拟主机申请新的IP地址。
(假设本机IP地址为211.100.6.48),我们为新的虚拟主机申请的IP地址为211.100.6.49。
◆让ISP作好相应的域名解析工作。
◆为网卡设置IP别名:
/sbin/ifconfigeth0:
0211.100.6.49netmask255.255.255.0
◆重新设置“/etc/httpd/conf/httpd.conf”,在文件中加入:
ServerAdminwebmaster@
DocumentRoot/home/httpd/xxxroot
ServerName
ErrorLog/var/log/httpd/xxxroot/error.log
◆建立相应的文档发布目录。
(注意,如果需要的话,可能有修改目录和文件属性的操作,以便提供ftp权限和log文件能被服务器写入出错信息)
mkdir/home/httpd/xxxroot
touch/var/log/httpd/xxxroot/error.log
◆将相应的主页内容存放在相应的目录中即可。
这种方式,每增加一个虚拟主机,就必须增加一个IP地址。
而由于IP地址空间已经十分紧张,所以通常情况下是无法取得这么多的IP地址的。
从某种意义上说,这也是一种IP地址浪费。
同时,你也需要为新的IP地址付费,提高了WEB服务的成本,所以这种方式已经极少采用了。
设置实现基于名字的虚拟主机服务
设置基于名字的虚拟主机服务同样非常的简单。
它不需要更多的IP地址,无须什么特殊的软硬件支持。
现代的浏览器大都支持这种虚拟主机的实现方法。
当然,这也就是指一些早期的客户端浏览器也许不支持这种虚拟主机的实现方法。
配置基于名字的虚拟主机服务需要修改配置文件:
“/etc/httpd/conf/httpd.conf”,在这个配置文件中增加以下内容:
NameVirtualHost211.100.6.48
DocumentRoot/home/httpd/xxxroot
ServerName
DocumentRoot/home/httpd/yyyroot
ServerName
也就是在基于IP地址的配置基础上增加一句:
NameVirtualHost211.100.6.48而已。
在本例中,为了体现只需要增加一次,所以特别地设置了两个虚拟主机服务。
最后也是建立相应的目录,将主页内容放到相应的目录中去就可以了。
在确认已经建立需要的所有目录和文件后,你还需要重启Apache服务器使设置生效。
七、使用SSL构建安全的WEB服务器
Web上的电子商务正在以超乎想象的速度发展。
许多公司正在建立电子商务WEB站点,以便在internet上开展业务。
电子商务站点的一个先决条件是具有安全事务处理能力,这一能力由安全套接字层(SSL,SecureSocketsLayer)提供。
不幸的是,由于美国在加密算法出口上的强制法律限制,apache并不包含SSL支持。
但是,有许多针对apache的第三方SSL软件。
下面这个比较也许能够帮助你选择所需要的软件。
另外,还有一个叫OpenSSL第三方软件,是一个合作的项目,其目标是开发一个健壮的、商业等级的、完整的开放源代码的工具包,用强大的加密算法来实现安全的socket层(SSL)和传输层的安全性(TLS,TransportLayerSecurity)。
由于这个合作项目的时间还不算长,在文档上和mod_ssl模块还有一些差距,相信不久以后应该会有改观。
它是免费软件中除了mod_ssl以外的又一个选择,它的具体资料请查阅本站解决方案的有关内容或者《GNU/Linux高级网络应用服务指南》(机械工业出版社出版LinuxAid网站编著2001年1月)。
我们主要讲解mod_ssl模块的使用——也许仅仅是因为mod_ssl组织声称全球已经有一百万家以上的站点正在使用它来构建安全的站点:
)。
1、获取有关软件包
值得注意的是,mod_ssl并不为你自己提供制作CA(认证中心)的东东,并且虽然它依赖于SSLeay软件包但是它并没有集成SSLeay——也许它还在考虑美国公民可以使用的rsaref20.tar.Z吧^&^。
SSLeay是一个强加密库,它本身已是个独立的跨平台的支持包,你完全可以使用它用来做自己的应用,这比微软在美国加密算法出口限制下卖给我们的弱加密工具强多了。
而在OpenSSL却包括了这个东东,所以我们通常使用OpenSSL来代替SSLeay包,顺便还得到了自己签署证书的工具,何乐而不为呢。
在正式去下载软件包之前,需要考虑使用什么样的版本的mod_ssl模块。
不同mod_ssl模块的版本支持不同版本的apache。
例如2001年5月20日发布的2.8.4-1.3.20支持Apache1.3.20(动作还是挺快嘛,呵呵)。
我们就使用目前最新的版本吧。
OpenSSL就无所谓了,不用最新的0.9.6a,反正SSLeay的变化不会很快:
)
mod_ssl2.8.4http:
//www.modssl.org/source/mod_ssl-2.8.4-1.3.20.tar.gz
openssl0.9.6http:
//www.openssl.org/source/openssl-0.9.6.tar.gz
别忘了去http:
//www.apache.org下载Apache1.3.20哦,这应该很脸熟了。
2、解压缩包
将我们要用的软件包拷贝到/usr/local/src。
#cp*/usr/local/src
#tarzxvfopenssl-0.9.6.tar.gz
#tarzxvfapache_1.3.20.tar.gz
#tarzxvfmod_ssl-2.8.4-1.3.20.tar.gz
**安装软件包技巧提示(非必要操作)
最好在编译前和编译后都做一张系统中所有文件的列表,然后用“diff”命令去比较它们,找出其中的差别并知道到底把软件安装在哪里。
只要简单地在编译之前运行一下命令“find/*>ssl1”,在编译和安装完软件之后运行命令“find/*>ssl2”,最后用命令“diffssl1ssl2>ssl”找出变化。
3、编译OpenSSL:
#cd../openssl-0.9.6
#./config--prefix=/usr/local/openssl
注意,这里是config而不是configure。
#make
#maketest
#makeinstall
4、配置Mod_SSL
#cd../mod_ssl-2.8.4-1.3.20
#./configure--with-apache=../apache_1.3.20
完成这一步操作后,mod_ssl模块将会把必须的文章自动放置在apache_1.3.20/src/modules目录下,这我们不用关心。
5、编译apache
在这里,你完全可以加上其它你需要的模块,例如PHP、PERL等等,配置好后,再在apache的配置选项中添加相关的内容,一同集成编译安装。
#cd../apache_1.3.20
#SSL_BASE=../openssl-0.9.6./configure--prefix=/usr/local/apache
--enable-module=ssl--enable-shared=ssl
注意,如果你已经拥有一个服务器证书和一个私人密钥,则可以为configure脚本提供如下选项:
--with-key/path/to/your/server.key
--with-crt/path/to/your/server.crt
因为有时需要或者使用者喜欢用知名的CA发的东东。
如果有了这一步,下面make后面的授权书的制作就可以省略了。
还有一个可选的--enable-shared=ssl选项使得mod_ssl构造成为一个DSO“libssl.so”。
关于在Apache支持DSO的更多信息,阅读Apache源代码树中的INSTALL和htdocs/manual/dso.html文档。
为了最灵活地使用mod_ssl,可以使用DSO工具,但是注意,DSO不是在所有平台上的Apache都支持。
#make
暂停,不要习惯性的下去就是makeinstall:
)。
我们需要先处理一些重要的东西(给你自己做个CA,发发证书什么的)。
#makecertificateTYPE=custom
生成你自己的CA和用它来为你的服务器签署证书。
需要提供很多信息的。
如果你想很详细的了解这个东东,请参考该授权书的安装介绍。
STEP0:
选择算法,使用缺省的RSA
STEP1:
生成ca.key,CA的私人密钥
STEP2:
为CA生成X.509的认证请求ca.csr
要输入一些信息:
STEP3:
生成CA的签名,ca.crt
STEP4:
生成服务器的私人密钥,server.key
STEP5:
生成服务器的认证请求,server.csr
要输入一些信息,和STEP2类似,
不过注意CommonName是你的网站域名,如www.LinuxAID
CertificateValidity不要太大,365就可以了。
STEP6:
为你的服务器签名,得到server.crt
STEP7-8
为你的ca.key和server.key加密,要记住passphrase。
如果需要配置系统自动启动SSL,请先看清楚安装介绍哦:
)
完成apache的安装
#makeinstall
#vi/usr/local/apache/conf/httpd.conf
修改BindAddress和ServerName
mod_ssl软件包在apache安装目录的etc子目录下安装了一个httpd.conf.default文件副本。
你可以使用该文件来测试并配置你的apache服务器。
我个人认为它没什么用。
如果要改变DocumentRoot要记得把httpd.conf里SSLVirtualHostContext部分的DocumentRoot设定也改掉。
SSLCertificateFile和SSLCertificatKeyFile的设定也在SSLVirtualHostContext部分。
它可能是这样设定的:
SSLCertificateFile/usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile/usr/local/apache/conf/ssl.key/server.key
要注意ssl.keyssl.crt等目录和文件的权限,所有的key,csr,crt,prm文件都应该设为400属性!
6、最后测试和系统配置
如果你的系统已经运行了WWW服务,请先把它停止,使用如下的命令:
#/etc/rc.d/init.d/httpdstop
#/usr/local/apache/bin/apachectlstartssl
提示输入passphrase(就是你前面输入的,你不会已经忘记了吧?
)输入后就启动了一个支持SSL的Apache。
测试它是否工作:
通过用一个Netscape与服务器连接并且选择https协议,即:
或:
443,也可以再试一下你的服务器的ip地址,即:
https:
//xxx.xxx.xxx.xxx和http:
//xxx.xxx.xxx.xxx:
443。
如果它起作用了,服务器将把证书发送到浏览器以建立一个安全连接。
这将让浏览器提示你接受自己签署的证书。
,如果它是来自VeriSign或Thawte的一张证书,那么浏览器将不提示你,因为证书来自一个可信的证书授权机构(CA)。
在我们的情况中,我们创建并签署我们自己的证书……我们不想马上买一个。
将Apache设定为在开机时自启动,修改/etc/rc.d/rc.local并且加入以下行:
echo"StartingApache-SSL"
/usr/local/apache/bin/apachectlstartssl
如果你以前使用了linux中的apache作httpd,需要去掉httpd的自动启动。
注意,如果还想获得更高的安全性,建议使用chroot来安装配置你的WWW服务器。
有关内容请参考LinuxAID的详细资料。
八、Linux下的WEB服务器维护与管理
在这一节里,我们将讲解一些Apache使用的常见基本内容,主要包括CGI配置和验证Web用户的常用部分。
我们的讲解是基于假定你是一个NT服务器的管理员或者知道一些WEB管理的常识的,也就是说,我们主要把精力集中在操作上而非概念上,这是我们专题一直秉承的风格。
■配置Apache的CGI脚本
·为每一个主机(包括虚拟主机)在DocumentRoot外建立一个单独的CGI中心目录,是建立一个安全CGI环境的开始。
·为你的CGI目录建立别名,使用ScriptAlias行:
ScriptAlias/alias//path/to/CGI-program-dir/
例如你在为主web服务器设置CGI支持,可编辑httpd.conf文件,加入如下行:
ScriptAlias/cgi-bin//www/themain/cgi-bin/
如果你在为虚拟主机配置CGI支持,你则可以在定义虚拟主机的容器中添加ScriptAlias行。
别忘了,我们的WWW服务器和IIS不同,我们是基于文件配置,基本上所有的设置都和httpd.conf文件的修改有关。
·限制CGI目录中可被访问的执行文件的后缀。
缺省的,在接受请求后,Apache会试图运行CGI目录中任何可执行文件(根据文件许可)——也就是说它会问你匹配任何存在的后缀。
我们一般只希望执行两种后缀的文件:
.pl和.cgi。
这可以通过AddHandler处理器来实现。
例如:
ScriptAlias/cgi-bin/"/www/themain/cgi-bin/"
OptionsExecCGI
AddHandlercgi-script.pl.cgi
第一行建立一个目录别名,第三行允许运行这一目录中的CGI程序,第四行告诉apache只要遇到这俩后缀的文件名,就必须将它当作CGI程序执行。
·为特殊目录使用AddType建立新的CGI后缀
如果你想在特殊的目录中建立新的CGI后缀,也可以使用.htaccess文件(或由AccessFileName指令指定的某个文件)。
在使用单目录的访问许可文件(.htaccess)添加新的扩展名之前,必须在httpd.conf建立一个容器,如下所示:
AllowOverrideFileInfo
OptionsExecCGI
其中AllowOverrideFileInfo告诉apache打开单目录的访问许可文件(.htaccess)的FileInfo功能。
这一功能可允许用户在单目录访问许可文件中使用AddType指令。
然后我们在该目录下简单的建立一个.htaccess文件,内容如下:
AddTypeapplication/x-httpd-cgi.reg
这样就添加了一个.reg的后缀了。
■Apache的HTTP认证
Apache支持基于主机的验证、基本HTTP验证等验证方案。
HTTP验证很常见,我们主要介绍它的设置。
默认情况下,Apache使用mod_auth.c模块提供验证支持。
mod_auth可以基于单个用户进行,也可以基于一个组的所有成员来认证。
我们只介绍单个用户的情况。
我们使用一个例子来详细介绍整个操作流程:
的WWW服务器的DocumentRoot为/www/xxx_com/,要对/www/xxx_com/user_admin/目录设置访问限制,并只允许webadmin这个用户访问,口令为6yhnmju7。
下面是建立这个受限访问的步骤:
◇STEP1:
使用htpasswd建立用户文件。
使用apache发行包中提供的htpasswd工具程序,建立一个httpd.conf文件中AuthUserFile指令指定的用户文件,一般是.htpasswd文件。
htpasswd-c/data/apache/xxx_com/user_admin/.htpasswdwebadmin
htpasswd程序将询问webadmin用户的口令,输入6yhnmju7,再重新输入一遍。
这样,我们便在/data/apache/xxx_com/user_admin/目录下建立.htpasswd用户文件。
注意,我们并没有把该用户文件放在DocumentRoot路径内,这是基于安全性考虑的,避免该文件被意外通过web下载。
使用-c参数是要新建立一个用户文件的意思,你可以参考htpasswd--help获得该程序的参数说明。
我们没有指定加密算法,所以缺省使用标准的crypt()函数加密。
确保上述用户文件能够被apache所访问到。
◇STEP2:
建立.htaccess文件。
使用文本编辑器(例如VI)在/www/xxx_com/user_admin/.htaccess文件中添加如下内容:
AuthName"用户管理员登录"
AuthTypeBasic
AythUserFile/data/apache/xxx_com/user_admin/.htpasswd
requireuserwebadmin
下面是各个指令的解释:
AuthName:
设置验证的名称。
AuthType:
设置验证类型。
由于只支持基本认证,所以只能填写Basic。
AythUserFile:
指定用户文件的路径和文件名。
require:
指定webadmin用户可以访问该目录。
◇STEP3:
设置文件许可。
在建立了.htaccess和.htpasswd文件后,确保只有apache才能读取这两个文件是非常必要的。
◇STEP4:
测试。
使用web浏览器访问如下链接Required错误信息。
点浏览器刷新,再次显示对话框后,输入正确的用户名和密码,这时候顺利进入该目录。
配置成功。
如果没有顺利进入该目录,请先检查输入用户名密码的正确性和大小写。
※附录:
Linux下WWW服务器安装FAQ
AmassedbyLinuxAIDlanf
提问:
我的配置是redhat7.0+apache+php+mysql,我的
mysql服务器在控制台上可以用mysql访问,但是
在php程序中用mysql_connect("localhost","root","password")
访问时却返回无法通过/var/lib/mysql/mysql.sock访问mysql.
请问是什么原因。
回答:
在RH7里普遍有这个问题,虽然你完全安装了RH7.0,但却无法使用
这个redhat7.0+apache+php+mysql集成环境。
所以建议大家还是用自己手动编译
重新安装这个东东。
先安装MYSQL,然后再编译安装PHP,这样就可以了。
该问题在redhat7.1中已经解决。
你只需要安装时选上development下language下的php-mysql
就可以使用这个集成环境——当然你需要选择安装该有的PHP等包,呵呵。
提问:
Resin中的libcaucho.sonotfound错误?
回答:
libcaucho.so包含了一些用于Unix的JNI。
当你调用配置make时,它必须被编译。
由于某种缘故,JVM没有取得库。
你很可能要检查LD_LIBRARY_PATH是否在你的环境以及wrapper.pl中。
对很多站点来说,libcaucho.so丢失不是一个大问题。
它只是grab一些CPUstatistics。
但是,italsoenabledthesetuidneededbyuser-nameandgroup-na