1 下载所需的软件包
apache_1.3.31.tar.gz [url]http://apache.linuxforum.net/dist/httpd/apache_1.3.31.tar.gz[/url]
mod_ssl-2.8.19-1.3.31.tar.gz [url]http://www.modssl.org/source/mod_ssl-2.8.19-1.3.31.tar.gz[/url]
openssl-0.9.7d.tar.gz [url]http://www.openssl.org/source/openssl-0.9.7d.tar.gz[/url]
apache_1.3.31.tar.gz [url]http://apache.linuxforum.net/dist/httpd/apache_1.3.31.tar.gz[/url]
mod_ssl-2.8.19-1.3.31.tar.gz [url]http://www.modssl.org/source/mod_ssl-2.8.19-1.3.31.tar.gz[/url]
openssl-0.9.7d.tar.gz [url]http://www.openssl.org/source/openssl-0.9.7d.tar.gz[/url]
mod_gzip-2.1.0.tar.gz
2 安装openssl
openssl 是mod_ssl 必需的软件包
#tar zxvf openssl-0.9.7d.tar.gz
#cd openssl-0.9.7d
#./config (请看清楚,不是一般的configure 它自己的是config)
#make
#make install
将openssl安装到/usr/local/ssl
3 将mod_ssl 配置进apache
#tar zxvf mod_ssl-2.8.19-1.3.31.tar.gz
#tar zxvf apache_1.3.31.tar.gz
#cd mod_ssl-2.8.19-1.3.31
#./configure --with-apache=../apache_1.3.31 --with-ssl=/usr/local/ssl/ --prefix=/usr/local/apache
Configuring mod_ssl/2.8.19 for Apache/1.3.31
+ Apache location: ../apache_1.3.31 (Version 1.3.31)
+ OpenSSL location: /usr/local/ssl/
+ Auxiliary patch tool: ./etc/patch/patch (local)
+ Applying packages to Apache source tree:
o Extended API (EAPI)
o Distribution Documents
o SSL Module Source
o SSL Support
o SSL Configuration Additions
o SSL Module Documentation
o Addons
Done: source extension and patches successfully applied.
Configuring for Apache, Version 1.3.31
+ using installation path layout: Apache (config.layout)
Creating Makefile
...........................................
Creating Makefile in src/main
Creating Makefile in src/modules/standard
Creating Makefile in src/modules/ssl
Now proceed with the following commands:
$ cd ../apache_1.3.31
$ make
$ make certificate
$ make install
[root@host5 mod_ssl-2.8.19-1.3.31]#
当大家看到以上的东西后,mod_ssl 已经加到了apache的源代码中,按照提示本来就应该直接到apache_1.3.31下面编译就可以使用apache 了,但是我发现这样编译后的apache 不具有动态模块加载(DSO)功能,那么来说,你的apache1.3.31只具备静态网页的功能(当然,你也可以用perl 来写CGI程序实现动态网页)其实DSO有很多好处,比如你可以加装PHP......等
4、编译和安装Apache 1.3.31
刚才提到为什么我们不按照指示去做呢,就是因为我们要把Apache 1.3.31编译成DSO模式。如果你单单想编译成静态模式的话,就直接在apache 1.3.27 目录下make 就OK了。
下面是把apache 1.3.31 编译成DSO模式。
2 安装openssl
openssl 是mod_ssl 必需的软件包
#tar zxvf openssl-0.9.7d.tar.gz
#cd openssl-0.9.7d
#./config (请看清楚,不是一般的configure 它自己的是config)
#make
#make install
将openssl安装到/usr/local/ssl
3 将mod_ssl 配置进apache
#tar zxvf mod_ssl-2.8.19-1.3.31.tar.gz
#tar zxvf apache_1.3.31.tar.gz
#cd mod_ssl-2.8.19-1.3.31
#./configure --with-apache=../apache_1.3.31 --with-ssl=/usr/local/ssl/ --prefix=/usr/local/apache
Configuring mod_ssl/2.8.19 for Apache/1.3.31
+ Apache location: ../apache_1.3.31 (Version 1.3.31)
+ OpenSSL location: /usr/local/ssl/
+ Auxiliary patch tool: ./etc/patch/patch (local)
+ Applying packages to Apache source tree:
o Extended API (EAPI)
o Distribution Documents
o SSL Module Source
o SSL Support
o SSL Configuration Additions
o SSL Module Documentation
o Addons
Done: source extension and patches successfully applied.
Configuring for Apache, Version 1.3.31
+ using installation path layout: Apache (config.layout)
Creating Makefile
...........................................
Creating Makefile in src/main
Creating Makefile in src/modules/standard
Creating Makefile in src/modules/ssl
Now proceed with the following commands:
$ cd ../apache_1.3.31
$ make
$ make certificate
$ make install
[root@host5 mod_ssl-2.8.19-1.3.31]#
当大家看到以上的东西后,mod_ssl 已经加到了apache的源代码中,按照提示本来就应该直接到apache_1.3.31下面编译就可以使用apache 了,但是我发现这样编译后的apache 不具有动态模块加载(DSO)功能,那么来说,你的apache1.3.31只具备静态网页的功能(当然,你也可以用perl 来写CGI程序实现动态网页)其实DSO有很多好处,比如你可以加装PHP......等
4、编译和安装Apache 1.3.31
刚才提到为什么我们不按照指示去做呢,就是因为我们要把Apache 1.3.31编译成DSO模式。如果你单单想编译成静态模式的话,就直接在apache 1.3.27 目录下make 就OK了。
下面是把apache 1.3.31 编译成DSO模式。
./configure --prefix=/usr/local/apache --enable-module=so --enable-module=ssl --enable-shared=max --enable-module=rewrite
so模块用来提供DSO支持的apachehe核心模块,rewrite是地址重写的模块,如果不需要可以不编译 enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块,ssl就是我们今天最重要的东西mod_ssl 模块
make
到此,apache 1.3.31+mod_ssl 已经编译完成,下面的是生成CA证书。
make certificate TYPE=custom,此处应该选一种生成证书的类型,我选custom,自己定义)
make install
启动并测试/usr/local/apache/bin/apachectl startssl
5 安装自己的证书
虽然在安装MOD_SSL时已经使用 make certificate 命令建立了服务器的证书签名,但是有时你可能需要改变它。
当然有很多自动的脚本可以实现它,但是最可靠的方法是手工签署证书.
1、先建立一个 CA 的证书
首先为 CA 创建一个 RSA 私用密钥。
cd /usr/local/apache
mkdir ssl 建立临时的目录
cd ssl
/usr/local/ssl/bin/openssl genrsa -des3 -out ca.key 1024
系统提示输入 PEM pass phrase,也就是密码,输入后牢记它。生成 ca.key 文件,将文件属性改为400,并放在安全的地方。
你可以用下列命令查看它的内容,
/usr/local/ss/bin/openssl rsa -noout -text -in ca.key
2、利用 CA 的 RSA 密钥创建一个自签署的 CA 证书(基于X.509协议)
/usr/local/ssl/bin/openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
然后需要输入下列信息:
Country Name: cn 两个字母的国家代号
State or Province Name: An Hui 省份名称
Locality Name: Bengbu 城市名称
Organization Name: Family Network 公司名称
Organizational Unit Name: Home 部门名称
Common Name: Chen Yang 你的姓名
Email Address: [email][email protected][/email] Email地址
生成 ca.crt 文件,将文件属性改为400,并放在安全的地方
你可以用下列命令查看它的内容,
/usr/local/ssl/bin/openssl x509 -noout -text -in ca.crt
3、接着创建服务器证书签署请求,
为 Apache 创建一个 RSA 私用密钥:
/usr/local/ssl/bin/openssl genrsa -des3 -out server.key 1024
4、用 server.key 生成证书签署请求 server.csr 文件
/usr/local/ssl/bin/openssl req -new -key server.key -out server.csr
这里也要输入一些信息,和前面的内容类似
A challenge password []: ? (这两个地方不用输入,直接敲回车)
An optional company name []:?(同上)
5、签署证书
需要用到脚本 sign.sh
sign.sh是MOD_SSL源代码中的一个脚本,它在MOD_SSL的
源代码目录树下的pkg.contrib目录中,文件名为 sign.sh。
将它拷贝到 /usr/local/ssl/bin 中
/usr/local/ssl/bin/sign.sh server.csr
就可以得到server.crt
至此,证书生成完毕。
现在需要做的工作是把server.crt 和server.key 拷贝到httpd.conf 里mod_ssl指定的位置,分别是/usr/local/apache/ssl.crt/server.crt 和/usr/local/etc/apache/ssl.key/server.key
注意检查一下httpd.conf中关于ssl的设置
SSLCertificateFILE usr/local/apache/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/server.key
可以 apachectl startssl 试一下了
由于安全的原因,Web服务器的私钥是口令加密了的,每次重新起动HTTPD或Linux时,都会要求输入Web服务器的私钥的口令。
如果要解除HTTPD起动时的口令输入,可以这样
# cd /usr/local/apache/conf/ssl.key
# cp server.key server.keyold
# openssl rsa -in server.keyold -out server.key
# chmod 400 server.key
此时,Web服务器的私钥已经没有口令加密,一定要确保server.key文件除root外,任何用户均无权读取它。
6、安装mod_gzip
a.下载源程序
可以从[url]http://sourceforge.net/[/url]下载mod_gzip的源程序,使用源程序编译生成Apache的模块(Mo dule)。
b.解压源程序
可以从[url]http://sourceforge.net/[/url]下载mod_gzip的源程序,使用源程序编译生成Apache的模块(Mo dule)。
b.解压源程序
tar -zxvf mod_gzip-2.1.0.tar.gz |
c.编译
进入源程序所在的目录进行编译,生成相应的动态链接库。编译需要指定参数APXS的相应位置:
make APXS=/apache/httpd/bin/apxs |
将mod_zip安装到Apache服务器中,其中也要指定APXS的具体位置:
make install APXS=/apache/httpd/bin/apxs |
d.调用mod_gzip模块
在Apache的配置文件httpd.conf中增加LoadModule参数,调用mod_gzip模块。
LoadModule gzip_module modules/mod_gzip.so |
5.测试
运行以下命令测试安装是否成功:
/apache/bin/apachectl configtest |
如果出现“Syntax OK”,则说明Apache中已经成功安装上mod_gzip的压缩模块了。
Apache中关于mod_gzip的配置
修改Apache的配置文件httpd.conf:
1.增加mod_gzip模块的调用
修改Apache的配置文件httpd.conf:
1.增加mod_gzip模块的调用
LoadModule gzip_module modules/mod_gzip.so |
2.开启压缩功能
mod_gzip_on Yes |
3.设置压缩文件的最小值
mod_gzip_minimum_file_size 1000 |
4.设定压缩文件的最大值
mod_gzip_maximum_file_size 300000 |
5.设定压缩文件的临时目录
mod_gzip_temp_dir /tmp/mod_gzip |
6.设定是否保持压缩的工作临时文件
mod_gzip_keep_workfiles No |
7.设定各种需要压缩的文件及扩展名
mod_gzip_item_include file \.htm$mod_gzip_item_include file \.html$mod_gzip_item_include file \.php$mod_gzip_item_include file \.php3$mod_gzip_item_include mime text/.*mod_gzip_item_include mime httpd/unix-directory |
常见问题及解决方法
1.解决调用标准zlib问题
如果在编译mod_gzip的时候没有指定zlib类库的具体位置,那么它默认路径就是/usr/local/lib,当 你的zlib不在这个目录下面的时候,就会报如下错误提示:
1.解决调用标准zlib问题
如果在编译mod_gzip的时候没有指定zlib类库的具体位置,那么它默认路径就是/usr/local/lib,当 你的zlib不在这个目录下面的时候,就会报如下错误提示:
Cannot load /httpd/modules/mod_gzip.so into server/httpd/modules/mod_gzip.so: undefined symbol: top_module (或者是deflate) |
解决方法就是,在编译mod_gzip的时候,编辑Makefile文件增加两个参数,分别指向zlib的存放目录:
INC=-I/usr/includeLIB=-lz -L/usr/lib |
编辑ld.so.conf文件,在其中增加存放zlib标准类库的具体目录,然后运行ldconfig。
这样更改以后,Apache就不会上述出现问题了。
2.Apache中jk2模块有可能和mod_gzip冲突
这种现象会出现在Apache2、jk2及mod_gzip2.0.40配合的时候。最简单的解决办法是,改变应用环境的版本,使用Apache1.3、jk及mod_gzip1.3配合就会避免产生这种冲突。
3.实现对servlet的压缩
我们在httpd.conf文件中增加相应的压缩配置文件,就可以实现对servlet进行压缩了。
mod_gzip_item_include handler jakarta-servletmod_gzip_item_include handler jakarta-servlet$mod_gzip_item_include handler ^jakarta-servletmod_gzip_item_include handler ^jakarta-servlet$mod_gzip_item_include handler ^^jakarta-servlet$ |
另外一种使用自己认证的SSL证书进行认证的方法
首先,我们要有进行简单SSL认证的三个要件:
私钥、公钥、经认证的证书
上述三个要件的创建,需要用到此命令 /usr/local/ssl/bin/openssl
第一步:创建私钥文件 privkey.pem 和证书签署请求文件 server.csr
# openssl req -new -out server.csr ↙
按提示输入初始的私钥密码(>4字节)两次输入确认无误
再按提示输入证书签署请求的主要信息:国家、省、市、公司、部门、通用名等......
注意:通用名项必填
Common Name ( eg, your name or your server's hostname) []:
可在:号后填写我们的服务器主机名 mypage.com.cn
通用名项后面几项可以直接↙不填
通过上步后,在当前目录下产生了 privkey.pem 和 server.csr 两个文件
第二步:创建公钥文件 every.key
# openssl rsa -in privkey.pem -out every.key ↙
按提示输入第一步中我们自己设定的私钥密码,正确则显示 ‘writing RSA key'
通过上步后,在当前目录下又产生了 every.key 文件
第三步:对认证签署请求进行认证,得到认证证书 zheng.crt
# openssl x509 -in server.csr -out zheng.crt -req -signkey every.key - days 365 ↙
经过此步,我们最终得到了最后一个文件,经认证的证书 zheng.crt
最后,我们要将公钥文件 every.key 和 证书文件 zheng.crt 的完全路径分别写在Apache 配置文件中的 Server Private key: 下 sslcertificatekeyfile 项和 Server Certificate:下 sslcertificatekeyfile 项中。
重新启动Apache 后,从443端口登录服务器主页时,
在弹出的授权认证对话框中点击 ‘检查证书'。便可看到发行者标识为 mypage.com.cn 的证书说明。接受此证书,就完成通过我们自己认证的SSL证书查看主页内容了。
首先,我们要有进行简单SSL认证的三个要件:
私钥、公钥、经认证的证书
上述三个要件的创建,需要用到此命令 /usr/local/ssl/bin/openssl
第一步:创建私钥文件 privkey.pem 和证书签署请求文件 server.csr
# openssl req -new -out server.csr ↙
按提示输入初始的私钥密码(>4字节)两次输入确认无误
再按提示输入证书签署请求的主要信息:国家、省、市、公司、部门、通用名等......
注意:通用名项必填
Common Name ( eg, your name or your server's hostname) []:
可在:号后填写我们的服务器主机名 mypage.com.cn
通用名项后面几项可以直接↙不填
通过上步后,在当前目录下产生了 privkey.pem 和 server.csr 两个文件
第二步:创建公钥文件 every.key
# openssl rsa -in privkey.pem -out every.key ↙
按提示输入第一步中我们自己设定的私钥密码,正确则显示 ‘writing RSA key'
通过上步后,在当前目录下又产生了 every.key 文件
第三步:对认证签署请求进行认证,得到认证证书 zheng.crt
# openssl x509 -in server.csr -out zheng.crt -req -signkey every.key - days 365 ↙
经过此步,我们最终得到了最后一个文件,经认证的证书 zheng.crt
最后,我们要将公钥文件 every.key 和 证书文件 zheng.crt 的完全路径分别写在Apache 配置文件中的 Server Private key: 下 sslcertificatekeyfile 项和 Server Certificate:下 sslcertificatekeyfile 项中。
重新启动Apache 后,从443端口登录服务器主页时,
在弹出的授权认证对话框中点击 ‘检查证书'。便可看到发行者标识为 mypage.com.cn 的证书说明。接受此证书,就完成通过我们自己认证的SSL证书查看主页内容了。