LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1181|回复: 0

使用OpenSSL与Apache搭建安全的服务器[原创]

[复制链接]
发表于 2005-11-19 04:25:46 | 显示全部楼层 |阅读模式
读前需知:
这是我的安装笔记,也就是共享出来给刚出门的向我一样的新手参考参考,如果是大牛级的人物,就请不要阅读了,浪费您们的时间,呵呵。
如果大家觉得哪里有问题,可以和我联系,xk DOT leng AT gmail DOT com     

第一,SSL(Secure Sockets Layer)与数字证书
关于SSL的详细介绍网络上和书本上都有大把大把的参考资源,并且讲述的也非常详细,我也就不在这里班门弄斧了。我就说说我对SSL的认识:
SSL就是给客户和服务器建立一条非常安全的信息交流通道,而实现安全传输的核心部分就是数字证书。
数字证书,可以是自己建立的,也可是是申请一些商业的CA。如果你要自己建立,首先要生存一个根证书,然后,使用根证书来签发服务器证书和客户端证书。所以,在本测试中,其实就是告诉大家如何来使用openssl生存这三个证书(根证书,服务器证书,客户端证书)的过程。
好了,废话少说,开工

第二,软件安装
软件获取:
OpenSSL:http://www.openssl.org
Apache:http://httpd.apache.org
关于如何安装OpenSSL与Apache不是本文主要内容,我简要的叙述一下:
OpenSSL部分:
#tar zxvf openssl-0.9.8a.tar.gz
#cd openssl-0.0.8a
#./config --prefix=/usr/local/openssl
#make
#make install
然后将openssl执行文件拷贝到/usr/bin中。
Apache部分:
#tar zxvf httpd-2.0.54.tar.gz
#./configure --prefix=/usr/local/apache2 --enable-ssl --enable-so --with-ssl=/usr/local/openssl
你可以根据你自己的实际需要编译安装apache的其它模块
#make
#make install
关于软件的安装,你可以参阅其自带的安装帮助文档来知道更多的相关资料。

第三,OpenSSL安装后的设置
在合适的地方建立一个OpenSSL工作环境目录,我的如下
#mkdir /opt/CA
然后在此目录下建立以下文件夹:
#cd /opt/CA
#mkdir certs
#mkdir crl
#mkdir mkdir newcerts
#mkdir private
#echo "01" > serial
#touch index.txt

修改openssl的配置文件:
#vi /usr/local/openssl/ssl/openssl.cnf
修改的内容如下:
####################################################################
[ ca ] default_ca = CA_default # The default ca section
####################################################################
[ CA_default ]
dir = /opt/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/private/CAcert.pem # The CA certificate
serial = $dir/serial # The current serial number
crl = $dir/clr/crl.pem # The current CRL
private_key = $dir/private/CAkey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file
其它部分你可以根据自己实际情况修改,反正openssl.cnf的注释非常详细,呵呵
ok,下面我们开始建立证书

第四,根证书建立
根证书是整个数字证书的基石,非常重要,是由CA证书(CAcert.pem)和私钥(CAkey.pem)组成,建立方法如下:
#openssl req -new -x509 -keyout /opt/CA/private/CAkey.pem -out /opt/CA/CAcert.pem -config /usr/local/ssl/openssl.cnf
Using configuration from /usr/local/ssl/openssl.cnf
Generating a 1024 bit private key
writing new private key to '/opt/CA/private/CAkey.pem'
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorperated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:CN
State or Province Name (full name) [MA]:GD
Locality Name (eg, city) [Cambridge]:FS
Organization Name (eg, company) [The Open Group]:donotry.net
Organizational Unit Name (eg, section) [Research Institute]:donotry.net
Common Name (eg, YOUR name) [example.opengroup.org]:donotry.net
Email Address []:xk.leng@gmail.com
以上就是你建立根证书时候需要输入的信息,你可以根据自己的实际情况来填写。输入的那个密码不要忘了。
此时,就已经建立好了根证书CAcert.pem和私钥CAkey.pem。

第五,服务器证书建立
服务器证书建立也不难,具体如下:
生成服务器私钥和证书请求
#openssl req -new -keyout serverKey.pem -out serverReq.pem -days 1825
此时也需要输入一系列的类似于建立根证书时候输入的信息,大家按照自己实际情况输入就ok了。
接下来,就要给签证了,如下:
#cat serverReq.pem serverKey.pem > server.pem
#openssl ca -policy policy_anything -out servercert.pem -infiles server.pem
Using configuration from /opt/www/lib/ssleay.cnf
Enter PEM pass phrase: 这个是你刚才建立服务器证书时候输入的密码
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName RINTABLE:'CN'
stateOrProvinceName RINTABLE:'GD'
localityName RINTABLE:'FS'
organizationName RINTABLE:'donotry.net'
organizationalUnitNameRINTABLE:'donotry.net'
commonName RINTABLE:'donotry.net'
emailAddress :IA5STRING:'xk.leng@gmail.com'
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
这样,我们就有了服务器证书servercert.pem和私钥serverKey.pem

第六,客户端证书建立
有了建立根证书和服务器证书的经验,建立客户端证书也就不是什么难事了,呵呵,如下:
生成客户端私钥clientkey.pem和客户端证书clientReq.pem请求
#openssl req -new -keyout clientkey.pem -out clientReq.pem -days 1852
此时也是需要输入一系列资料的,同上面的相似。
签证:
#openssl ca -in clientReq.pem -out client.crt
转换证书成为pkcs12格式,方便客户端导入浏览器:
#openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
现在,我们就拥有了客户端证书client.pfx和客户端私钥clientkey.pem。

第七,部署apache服务器
创建以下两个目录:
#mkdir /usr/local/apache2/conf/ssl.crt
#mkdir /usr/local/apache2/conf/ssl.key
文件复制到指定位置:
#cp /opt/CA/servercert.pem /usr/local/apache2/conf/ssl.crt/servercert.crt
#cp /opt/CA/CAcert.pem /usr/local/apache2/conf/ssl.crt/CAcert.pem
#cp /opt/CA/serverKey.pem /usr/local/apache2/conf/ssl.crt/serverKey.key
编辑ssl.conf文件
#vi /usr/local/apache2/conf/ssl.conf
修改如下部分:
服务器证书位置
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
服务器证书私钥位置
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.crt/serverKey.key
证书目录
SSLCACertificatePath /usr/local/apache2/conf/ssl.crt
根证书位置
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/cacert.pem
开启客户端SSL请求
SSLVerifyClient require
SSLVerifyDepth 2
至于ssl.conf其它部分,可以根据自己实际情况修改。

第八,客户端安装
#mv cacert.pem ca.crt
将根证书ca.crt和客户端证书client.pfx下载到客户端,然后分别导入到浏览器中。

第九,启动apache服务
#/usr/local/apache2/bin/apachectl startssl
然后需要输入服务器证书的私钥密码,输入之,如果不出任何意外,则正常启动。出了意外也不要惊慌,逐步排除错误,呵呵

第十,简单测试
在客户端中打开浏览器,输入服务器地址:10.1.17.119,如果能正常使用证书浏览,那就说明一切正常,如果出现问题,请自己查找相关资料解决,呵呵,当然,和我交流交流也可以,但是我不一定知道,因为我没有google那么大的容量,呵呵。

ok,这就是整个的安装过程, 其实不难,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表