1. 用户认证
创建口令文件
htpasswd -c /x/y/z/paswd user1
htpasswd /x/y/z/paswd user2
配置httpd.conf
<Directory "/var/www/html">
AuthType Basic
AuthName "Please login:"
AuthUserFile /x/y/z/pswd
Require user user1 user2
</Directory>
2. 增加虚拟目录temp,允许访问的网段192.168.1.0/24。配置web服务器允许该虚拟目录具有目录浏览和允许内容协商的多重视图特性。
Alias /temp “/var/www/temp"
<Directory "/var/www/temp">\
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from 192.168.1.0/24
</Directory>
3. 增加虚拟主机
<VirtualHost 10.0.0.8:80>
ServerAdmin web1@web1.com
DocumentRoot /var/www/web1
ErrorLog logs/web1-error_log
CustomLog logs/web1-access_log common
</VirtualHost>
<VirtualHost 10.0.0.9:80>
ServerAdmin web1@web1.com
DocumentRoot /var/www/web2
ErrorLog logs/web2-error_log
CustomLog logs/web2-access_log common
</VirtualHost>
4. 执行cgi
修改配置httpd.conf
AddHandler cgi-script .cgi
Options ExecCGI
5.1. Apache WEB服务器增加SSL
5.2.生成动态库
SSL功能在Apache的ssl模块中,在现有Apache的安装中增加SSL功能,需要编译ssl模块,将生成的动态库放到安装目录的modules目录中。
先执行configure脚本。
configure --prefix=$instdir$ --enable-ssl=yes --with-ssl=$instdir_openssl$ --enable-mods-shared=ssl
$instdir_openssl$是OpenSSL的安装路径,$instdir$是Apache的安装路径(指定一个与现有Apache安装目录不同的目录)。
执行make和make install后,将$instdir$/modules中ssl模块的动态库放到现有Apache安装目录的modules目录中。
5.3.证书
配置文件中引用的server.crt和server.key是WEB服务器使用的证书和证书对应的私钥,client.crt是客户端的CA证书。如果客户端的CA证书有多个,可以将各证书的内容合在一起,放在一个文件中,也可以将它们放到单独的目录,使用SSLCACertificatePath配置参数指定这个目录,如新建client目录存放客户端的CA证书,将SSLCACertificateFile配置参数替换为:
SSLCACertificatePath $instdir$/conf/ssl/client
为保证安全,WEB服务器使用的证书应是客户或第三方机构签发的,客户端的CA证书一般由客户端提供。
测试时也可用OpenSSL建立自签名的证书,建立方法如下:
openssl req -new -out server.csr
openssl rsa -in privkey.pem -out server.key
openssl x509 -req -in server.csr -signkey server.key -out server.crt
第一步会生成证书请求和一个有密码保护的私钥文件(privkey.pem),生成时会提示输入保护私钥文件的密码,还会提示输入其他一些证书中的信息。
第二步是将私钥文件privkey.pem的密码保护去掉,去掉时会要求输入第一步的密码。
第三步是用私钥server.key签名,生成证书server.crt。
client.crt生成方式与server.crt相同。
5.4. 修改配置文件
修改httpd.conf,加载新生成的ssl模块动态库。另外,增加一个VirtualHost,使其监听一个不同的端口。在httpd.conf中增加下面配置($ip$、$port$、$AIIP_HOME$和$instdir$需要替换):
Listen $ip$:$port$ (与现有的Listen配置放在一起)
LoadModule ssl_module modules/mod_ssl.so
<VirtualHost $ip$:$ port $> (放在配置文件最后)
ScriptAlias /SSL_Test "/var/www/cgi-bin/SSL_Test"
SSLEngine on
SSLVerifyClient require
SSLCertificateFile $instdir$/conf/ssl/server.crt
SSLCertificateKeyFile $instdir$/conf/ssl/server.key
SSLCACertificateFile $instdir$/conf/ssl/client.crt
</VirtualHost>
修改完成后重启Apache服务器,通过端口$port$进行的连接就是采用了SSL的连接(https)。