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]
 
    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模式。

./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.解压源程序
         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模块的调用
         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不在这个目录下面的时候,就会报如下错误提示:
         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证书查看主页内容了。