win apache实现ssl的证书

原来win apache实现ssl 的证书认证如此简单 windows apache的情况下,实现ssl 的证书认证(win 下用openssl 做证书极为困难的问题彻底解决了)我写得非常详细,一步一

原来win apache实现ssl 的证书认证如此简单 windows apache的情况下,实现ssl 的证书认证

(win 下用openssl 做证书极为困难的问题彻底解决了)

我写得非常详细,一步一步都说得很清楚。实际操作极为简单,要不了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 :

找到#;和#;,把前面的’#‘号都去掉,否则启动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 filesopenvpn�sy-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 ,嗬嗬!!!

标签: