|   
 UID1 威望1240 点 金钱24019 金币 点卡317 点 
 | 
 [推荐]windows+apache组合实现ssl的证书认证
| 写得非常详细,一步一步都说得很清楚。实际操作极为简单,要不了5分钟,是我的字打得太多了.如果发现错误,遗漏请提出。 首先,到http://hunter.campbus.com/去下载和自己的apache版本相同的的Apache_xxx-xxxOpenssl_xxx-Win32.zip。解压缩后找到这5个文件mod_ssl.so(modules目录),ssl.conf,ssl.default.conf(conf目录,
 其中default.conf作为备份),libeay32.dll, ssleay32.dll(这2个都在bin目录)。把它们全都复制到你自己的apahce下的对应目录。
 
 ###############################################################################
 接下来,更改设置文件
 
 对于httpd.conf和ssl.conf,如果你的服务器没有域名,那么servername就填ip好了。
 比如:ServerName 10.10.10.10:80(httpd.conf)
 ServerName 10.10.10.10:443(ssl.conf)
 打开httpd.conf:
 找到#LoadModule ssl_module modules/mod_ssl.so,去掉前面的‘#‘,这样就在启动时加载了ssl模块。
 打开ssl.conf:
 找到#<IfDefine SSL>和#</IfDefine>,把前面的’#‘号都去掉,否则启动apache时还要加参数,麻烦。
 如下设置:
 SSLMutex none                         (这个我是none,有人是default,具体怎么设可以研究一下)
 SSLCertificateFile conf/server.crt    (服务器证书的位置,就是公钥吧?)
 SSLCertificateKeyFile conf/server.key (服务器私钥的位置)
 SSLCACertificateFile conf/ca.crt      (CA根证书的位置,进行客户端验证时需要。也是一个CA公钥吧?
 我把它们都放在apache的conf目录下了)
 DocumentRoot "xxxxx"                  (指向要ssl加密认证的文档目录,比如"f:/http")
 SSLVerifyClient require               (去掉前面的‘#’号,进行客户端验证时需要)
 SSLVerifyDepth  1                     (去掉前面的‘#’号,把10改为1,进行客户端验证时需要)
 
 ##############################################################################
 现在,就要制作证书了
 
 去openvpn.net下载并安装openvpn。
 这是一个虚拟个人网络制作工具,他能完美的在win(linux,BSD也行)下制作根、服务器、客户端证书。
 安装完毕后,开始-程序-附件-命令提示符,进到openvpn的easy-rsa目录,比如:
 f:\program files\openvpn\easy-rsa>_
 输入:
 init-config 回车
 会产生几个文件,切换出来,打开vars.bat文件,修改其中的KEY_COUNTRY(国家2位字母), KEY_PROVINCE(省2位字母), KEY_CITY(城市), KEY_ORG(组织),  KEY_EMAIL(电子邮箱)这几个参数,免的后面制证时
 反复输入麻烦。保存退出,继续使用命令提示符。
 依次输入以下两个命令,当然是分别回车喽:
 vars
 clean-all   (这两个是准备工作)
 
 
 ####################################################################################
 
 1.
 建立CA根证书
 
 接着输入build-ca   回车(这个就是建立CA根证书啦)
 
 然后显示:
 ai:/usr/share/openvpn/easy-rsa # ./build-ca
 Generating a 1024 bit RSA private key
 ............++++++
 ...........++++++
 writing new private key to ';ca.key';
 -----
 You are about to be asked to enter information that will be incorporated
 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) [KG]:          国家名2位字母,默认的参数就是我们刚才修改过的。
 State or Province Name (full name) [NA]:    省、州名2位字母
 Locality Name (eg, city) [BISHKEK]:         城市名
 Organization Name (eg, company) [OpenVPN-TEST]:     组织名
 Organizational Unit Name (eg, section) []:           组织里的单位名
 Common Name (eg, your name or your server';s hostname) []:这个是关键,应该输入颁发根证书单位的域名
 ,不过因为是根证书,所以怎么填都无所谓。只有服务器证书才需要认真填。
 Email Address [me@myhost.mydomain]: 电子邮箱
 好了,CA根证书制作完成!在keys目录下,它的名字就叫ca.crt,CA的私钥是ca.key
 
 #######################################################################
 
 2.
 现在制作服务器证书:
 在命令提示符下,输入
 build-key-server server   回车
 你会看到和上面很相似的东西
 但要注意这里的Common Name (eg, your name or your server';s hostname) []:
 这个才是真正的关键。这里应该输入服务器的域名比如www.xxx.com。
 如果没有域名,就应该填ip,与httpd.conf和ssl.conf里的设置对应,
 ServerName 10.10.10.10:80(httpd.conf)
 ServerName 10.10.10.10:443(ssl.conf)
 也就是说填:10.10.10.10
 接下来看到 a challenge password []:填不填随便,我不填
 an optional company name []: 填不填随便,我不填
 sign the certificate? [y/n] 敲y回车。用CA根证书对服务器证书签字认证。
 1 out 1 certificate requests certified,commit? [y/n] 敲y回车,确认。
 好了,建好了在keys目录下的server.crt(证书)和server.key(私钥)
 
 #######################################################################
 
 3.
 现在制作客户端证书:
 在命令提示符下,输入
 build-key client1   回车
 又是一通国家省市组织等等,comman name也是随便填的。
 然后
 a challenge password []:填不填随便,我不填
 an optional company name []: 填不填随便,我不填
 sign the certificate? [y/n] 敲y回车。用CA根证书对客户端证书签字认证。
 1 out 1 certificate requests certified,commit? [y/n] 敲y回车,确认。
 好了,建好了在keys目录下的client1.crt(客户端证书)和client1.key(私钥)
 等等, .crt的客户端证书是不能使用的,必须把它转化为.pfx格式的文件!!
 所以,还是在命令提示符下,输入
 openssl 回车
 看到openssl>
 再输入
 pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx
 回车,
 看到Enter export password:会要求你建立客户端证书的输出密码,我填hehe,
 verifying-Enter export password再确认一遍hehe,好了!
 
 ########################################################################
 
 把keys目录下的ca.crt和server.crt,server.key都复制到apache的conf目录下,(ssl.conf需要)
 ca.key自己保留吧,找个合适的地方储存起来.
 
 #########################################################################
 
 客户端安装证书
 
 打开internet explorer(IE),工具-internet选项-内容-证书,点选';个人';
 再点击导入,把客户端证书client1.pfx导入到个人组里(别忘了扩展名是pfx)。
 这里还要输入刚才建立的输出密码hehe才能倒入呢。
 接着,点选';受信任的根证书颁发机构';,点击导入,把CA根证书ca.crt导入到受信任的根证书颁发机构里。
 
 #########################################################################
 好啦,重新启动apache,打开IE,
 在地址栏里输入https://10.10.10.10或者域名,弹出个窗口要选择个人的数字证书。
 点选,然后确定。
 如果服务器证书的common name填写正确的话,你就可以直接进入网站了,看到右下角的小锁头(可靠的SSL128位)。
 如果服务器证书的common name填写不正确,就会弹出个‘安全警报’框,告诉你3条:
 1.安全证书由信任的站点颁发
 (如果说是由不信任的站点颁发,那就是你的ca根证书ca.crt没有导入到ie的受信任的根证书颁发机构里)
 2.安全证书的日期有效
 (这个日期缺省是10年,可以在openvpn的easy-rsa目录下的openssl.cnf里调整修改,然后重新制作一整套证书(openssl.cnf看起来像拨
 号网络的快捷方式,要用记事本,写字板打开修改))
 3.“安全证书上的名称无效,或者与站点名称不匹配”
 这就是服务器证书的common name填写不正确所致,不过这也没关系,有人好像愿意这样。我是不想看到这个警告框,烦人。
 即使有安全警报,你仍能进入网站,看到右下角的小锁头(可靠的SSL128位)
 
 #################################
 最后,成功啦!用吧。
 我自己把httpd.conf里的listen 80都加#注释了,servername改为10.10.10.10:443,只用https不用http,嗬嗬!!!
 | 
 
| 我是一个呼吸着现在的空气而生活在过去的人
 这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
 我已习惯了孤独,爱上孤独
 他让我看清了自我,还原了自我
 让我再静静的沉思中得到快乐和满足
 再孤独的世界里我一遍又一遍
 不厌其烦的改写着自己的过去
 延伸到现在与未来
 然而那只是泡沫般的美梦
 产生的时刻又伴随着破灭的到来
 在灰飞烟灭的瞬间我看到的是过程的美丽
 而不是结果的悲哀。。。
 
 |  |