openssl建立自己的证书服务器并应用(ssl+apache)
2008-02-26 13:51:02 / 个人分类:软件使用
$iU;HQ)i/Z;?W0本文的目的是为了交流,如有出错的地方,请指教
+t+fl+T#x0ITPUB个人空间"Gz i X.wIR
现在开始安装
首先在安装之前要明白一些基本概念
1、SSL所使用的证书可以是自己建的生成的,也可以通过一个商业性CA如Verisign 或 Thawte签署证书。
|2ea6QKID02、证书的概念:首先要有一个根证书,然后用根证书来签发服务器证书和客户证书,一般理解:服务器证书和客户证书是平级关系。在SSL必须安装根证书和服务器证书来认证。
因此:在此环境中,至少必须有三个证书:即根证书,服务器证书,客户端证书ITPUB个人空间"a!^Pb(x6J
在生成证书之前,一般会有一个私钥,同时用私钥生成证书请求,再利用证书服务器的根证来签发证书。
3、签发证书的问题:我最近找了很多关于openssl的资料,基本上只生成了根证书和私钥及服务器证书请求,并没有真正的实现签证。我这里参考了一些资料,用openssl自带的一个CA.sh来签证书,而不是用MOD_ssl里的sign.sh来签。
用openssl语法来生成证书,有很多条件限定,如目录,key的位置等,比较麻烦,我实验了好几天,最后放弃了。有兴趣的可以参考一下openssl手册。
Z2B1@_9w!B0[b]步骤一:安装openssl和apache[/b]ITPUB个人空间v5^0FEP
1、到www.openssl.org下载openssl-0.9.7e.tar.gz(目前最新版)
M+t!Moj02、卸载掉老的opensll库ITPUB个人空间i5S#Bb*_(H"}
#rpm –e –-nodeps
openssl
Ji.Zu4F!vq#j03、解压:ITPUB个人空间 v2^1T,n0P
#tar xzvf
openssl-0.9.7e.tar.gzITPUB个人空间l/O6[N&u
hj8a]\$y
4、进入openssl目录,并安装,用--prefix指定openssl安装目录
5\8FI,J"~c(La0#cd openssl-0.9.7eITPUB个人空间!f;fD!Ig O4Z
#./config
--prefix=/usr/local/opensslITPUB个人空间^$[#zX7o
R}P&F
#makeITPUB个人空间0_m(q8?
u7K!P
#make test
x'^1}A!ol-e$x0#make install
5、安装apacheITPUB个人空间 q%HO2T~ V'q
至www.apache.org/dist下载apache最新版httpd-2.0.52.tar.gzITPUB个人空间#l:i,\
t;r+nu5[7P
解压后进入apache目录,根据需要安装需要的模块,我这里装了ssl,rewrite,动态模式安装
?u6X0gpl7lpoV0#tar zxvf
httpd-2.0.52.tar.gzITPUB个人空间 y^0EIU
#cd
httpd-2.0.52ITPUB个人空间n @{9w.i
k
#./configure --prefix=PREFIX --enable-ssl --enable-rewrite
--enable-so --with-ssl=/usr/local/openssl
,l1{1Y9i \;wA AZQ0#make
0Mk,_oV\T0#make install
[b]步骤二:签证[/b]ITPUB个人空间S6S3b5mUXX*M
安装openssl后,在openssl下有一个CA.sh文件,就是利用此文件来签证,ITPUB个人空间:NOyt'_;IJ5K(Q
来签三张证书,然后利用这三张证书来布SSL服务器。
1、在/usr/local/apache/conf下,建立一个ssl.crt目录,将CA.sh文件copy至/usr/local/apache/conf/ssl.crt/目录ITPUB个人空间t,W@{8g
[root@win ssl]# cp
/usr/local/openssl/ssl/misc/CA.sh /usr/local/apache/conf/ssl.crt/CA.sh
2、运行CA.sh
-newca,他会找你要CA需要的一个CA自己的私有密钥密码文件。如果没有这个文件?按回车会自动创建,输入密码来保护这个密码文件。之后会要你的一个公司信息来做CA.crt文件。最后在当前目录下多了一个./demoCA这样的目录../demoCA/private/cakey.pem就是CA的key文件啦,./demoCA/cacert.pem就是CA的crt文件了
@5L.z2l*[!XK3~.X;_ W!T0[root@win ssl.crt]#
./CA.sh -newca
要求输入如下信息:
0H6q+L&l7I
b5i3a0[quote]Country Name (2 letter code) [GB]:CN
xd _z"^8e"W,_'z|6^_^j0State or Province Name
(full name) [Berkshire]:FUJIAN
-GCm8_2oM+k$i1j0Locality Name (eg, city)
[Newbury]:FUZHOU
YKm jj0Organization
Name (eg, company) [My Company Ltd]:FJJM
/C)VI+l}~0Organizational Unit Name (eg, section)
[]:FD
z,~Or2O#\.~0Common Name (eg, your
name or your server's hostname) []:WIN
Vh;fqFY}-Ij0Email Address
[]:WIN@WIN.COM[/quote]ITPUB个人空间a+D,W0kK
这样就建好了一个CA服务器,有了一个根证书的私钥cakey.pem及一张根证书cacert.pem,现在就可以cacert.pem来给签证了
3、签署服务器证书
#X"O#K2^ A$D0生成服务器私钥:ITPUB个人空间|L9p/y4Nf|
[root@win ssl.crt]#
openssl genrsa -des3 -out server.key
1024
}W?HQ:t~q_0生成服务器证书请求ITPUB个人空间 f;U.Oo"f?f6Wz
[root@win ssl.crt]#
openssl req -new -key server.key -out server.csrITPUB个人空间G9u'x tIE
会要求输入信息ITPUB个人空间8wPhG8H0q
Country Name (2 letter
code) [GB]:CNITPUB个人空间*kX3Vq3ZK
State
or Province Name (full name) [Berkshire]:FUJIANITPUB个人空间A-B,d@H$ImB
Locality Name (eg,
city) [Newbury]:FUZHOUITPUB个人空间9Evn"]:A
Organization Name (eg,
company) [My Company Ltd]:FJJM
(Fb R\mBx
J8m0Organizational Unit Name (eg, section) []:FD
Sm]3I;G3^ nN0Common Name (eg, your name or your
server's hostname) []:WIN
`9G8E2y9Q!YU
M0Email Address []:WIN@WIN.COM
Q.C,sGR*UG0Please enter the following 'extra'
attributes
*K)P6W+_-KpJ3hzo8O0to be
sent with your certificate request
Hw;nA?9K(b+]5P/Kt0A challenge password
[]:WINITPUB个人空间 N-P-W/B$}~wN9h8C
An
optional company name []:WING
最后把server.crt文件mv成newreq.pem,然后用CA.sh来签证就可以了
E5a s~d6{~:v0[root@win ssl.crt]# mv server.csr
newreq.pemITPUB个人空间Tu7XU(J^c
[root@win ssl.crt]#
./CA.sh -sign这样就生成了server的证书newcert.pem
LPIx"b,Q-BI.V0把newcert.pem改名成server.crt
4X }dAq} f9H0[root@win ssl.crt]# mv newcert.pem
server.crt
ITPUB个人空间o6|4| LNvl
4、处理客户端:ITPUB个人空间0B`K@[
生成客户私钥:ITPUB个人空间 br-AvuS3E8v
[root@win ssl.crt]#
openssl genrsa -des3 -out client.key
1024
/_"Beq t }0请求ITPUB个人空间N,W;U.jd:T~
[root@win ssl.crt]#
openssl req -new -key client.key -out client.csrITPUB个人空间&}2o{'Jd`]&x
签证:ITPUB个人空间"jN$UHi7}2D%L
[root@win ssl.crt]#
openssl ca -in client.csr -out client.crtITPUB个人空间4C}(KmJy(X p#|
把证书格式转换成pkcs12格式ITPUB个人空间@/g K8p\J
[root@win ssl.crt]#
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out
client.pfx
5、这时就有了三张证书和三个私钥,一个是demoCA下的根证书,ssl.crt下的服务器证书和客户证书。及demoCA/private下的根key,ssl.crt下的服务器key和客户key,在conf下的ssl.conf下指定证书的位置和服务器key的位置.
我是在conf下建立一个ssl.crt目录,并将所有的key和证书放到这里
.\ I
MTFS0#cp demoCA/cacert.pem cacert.pemITPUB个人空间+Z/Q1S$v7\9[[J7]
`_Y
同时复制一份证书,更名为ca.crtITPUB个人空间xh0Qc,f#z~D1S+O1B
#cp cacert.pem
ca.crt
步骤三、编辑ssl.confITPUB个人空间j#@q D X2T
#cd
/usr/local/apache/confITPUB个人空间@'XsC]*q+we3u#B^l
编辑ssl.confITPUB个人空间wE9|_"cF.L3|3L\
指定服务器证书位置
&~ \L{l*Y}I0SSLCertificateFile
/usr/local/apache/conf/ssl.crt/server.crtITPUB个人空间.ZFEG+B]*AH
指定服务器证书key位置ITPUB个人空间.|/@`ur"X5b
SSLCertificateKeyFile
/usr/local/apache/conf/ssl.crt/server.keyITPUB个人空间!d5B#[tY?N s
证书目录
s['kt_o&}|0SSLCACertificatePath
/usr/local/apache/conf/ssl.crt
Bw~)a3P
e0根证书位置
G!H:kF$Il5W
r:d0SSLCACertificateFile /usr/local/apache/conf/ssl.crt/cacert.pemITPUB个人空间~Qyi(]u.Tn a)B
开启客户端SSL请求ITPUB个人空间:ov3Pk Iy}
SSLVerifyClient
requireITPUB个人空间kO3hp@*J%YQ
SSLVerifyDepth 1
启动sslITPUB个人空间9~?p$L
h
/usr/local/apache/bin/apachectl startssl会要求输入server.key的密码ITPUB个人空间sX%M:Q
H)LZK
启动,这样一个默认的SSL服务器及http服务器就启动了,
[b]步骤四、安装和使用证书[/b]
p4@Y+u(M&f x:o
x.b0把刚才生成的证书:根证书ca.crt和客户证书client.pfx下到客户端,并安装,
3|QE$i5?T5[7jNi0ca.crt安装到信任的机构,client.pfx直接在windows安装或安装到个人证书位置,然后用IP访问HTTP和https服务器。
作者名:wingger 查看原文,并保持文章的完整性
相关阅读:
- Linux 2.6内核嵌入式系统应用 (joejoe0332, 2008-1-14)
- 常见Java开源JMS消息中间件及特性简介 (joejoe0332, 2008-1-17)
- Ubuntu 8.04 Hardy Heron Alpha 3+初体验 (joejoe0332, 2008-1-21)
- 软件试用:开源的Web Service测试工具 (joejoe0332, 2008-1-29)
- MySQL Proxy 学习笔记 (joejoe0332, 2008-1-29)
- 四步确保安全使用LAMP开源开发工具 (joejoe0332, 2008-1-29)
- 第一次动脑筋写erlang程序 (joejoe0332, 2008-2-13)
- 选择最合适的开源解决方案 (joejoe0332, 2008-2-15)
- MySQL:使用源码分发版还是二进制分发版 (joejoe0332, 2008-2-25)
- 开源的Web Service测试工具介绍 (joejoe0332, 2008-2-25)
推荐 收藏 导入论坛 等级(1) 编辑 管理 查看(169) 评论(0) 评分(0/0)
TAG: 软件使用