前面已经简要介绍了数字证书以及数字证书认证中心,CA中心是PKI核心部件,数字证书也是PKI的基础,所以下面就先来实现一个简单的数字证书认证中心,因为我也没有具体建过CA中心,全凭理论,也是为了以后的研究建立一个演示的基础,所以只能是当作了解和熟悉一下CA中心的过程.
在这个简单的数字证书中心主要包括三个部分:
RA:注册中心 通过Web Server建立一个站点(由apache+modssl搭建),为客户提供交互的服务,主要实现填写表单,安装根证书,查询和下载用户证书,以及提交证书挂失和证书修改请求等功能。
CA:认证中心,利用openssl API编写实现各类证书以及CRL生成的程序,通过CGI接收到RA发过来的请求进行各类处理。主要实现证书的生成,CRL的生成,数据归档,用户私钥存档等功能。
LDAP服务器,主要存储用户证书以及CRL,并且可以处理来自RA的一些请求(譬如查询和下载证书)
下面我们就来安装必须的软件(本应该是在linux下的实现,毕竟在linux对下面这些软件支持得更好,但是为了方便,这里就讨论windows下的吧,不过效率和安全性要差一些):
一:openssl的安装,在这里就没有什么好说的拉,按照openssl在windows下的安装手册一步一步走就可以拉。主要步骤如下:
1, 安装ActivePerl
2, 解压缩openssl-097D至C盘
3, 解压缩VC60SSL097.tar至openssl目录下
4,c:\openssl>Perl Configure VC-WIN32
5, ms\d0_ms.bat
6, Perl msvc097\doinc.pl
7, 打开msvc097里的openssl.dsw
8, build -> Batch build -> Build ALL;
二:apache+php的安装
1,安装apache_1.3.31-win32-x86-no_src至C盘下,修改httpd.conf,将DocumentRoot 改为存放网页的目录,保存后重启Apache服务。
2,将php-5.0.2-Win32解压缩至C:\PHP5,将PHP目录下的php.ini-recommed文件改名为php.ini并拷贝到.\apache目录下,这里有几个需要改动的地方。
Extension_dir=./改为extension_dir=c:\PHP5
Doc_root=改为doc_root=d:\www
Session.save_path=/tmp改为session.save_path=C:\WINNT\Temp
;upload_tmp_dir=改为upload_tmp_dir= C:\WINNT\Temp.前面的;号要去掉的
;default_charset=iso-8859-1改为default_charset=??????
3,修改完PHP.ini以后将PHP目录下的php5ts.dll文件拷贝到C:\WINNT\system32目录下,复制php5apache2.dll到./Apache/modules下,假如使用的是Apache1.xx.xx的话,复制php5apache.dll。
4,最后修改Apache的httpd.conf文件,在文件的末尾添加下面:
LoadModule php3_module modules/php5apache2.dll(modules/php5apache.dll)
AddType application/x-httpd-php .php
查找DirectoryIndex index.html这行,将在index.html的前面加上一个index.php,两者之间要有空格,然后就可以保存重启测试拉。
因为在windows下要把modssl和php均以模块化形式导入apache中很麻烦(linux没问题),所以这里只能省了modssl,这在以后就不太容易实现HTTPS服务了(看来还是linux好)。建议不要将php的register_globals = Off修改,采用$_POST,$_GET等方式。
三:openldap的安装
1,安装openldap-2_1_29-1-win32.exe,一路NEXT就OK拉。
2,修改slapd.conf,添加:
include "d:/openldap/etc/schema/cosine.schema"
include "d:/openldap/etc/schema/inetorgperson.schema"
allow bind_v2
更改suffix,rootdn,rootpw等
3,将下面一段添加至inetorgperson.schema中,这相当于我定义新的objectClass
objectclass
( 2.16.840.1.113730.3.2.3
NAME 'guestcertificate'
DESC 'guestcertificate'
SUP top
STRUCTURAL
MAY
(
mail $ userCertificate $ cn $ c $ st $ l $ o $ ou $ userPKCS12 )
)
4,添加根DN
写一个ldif文件包含下面语句
dn:dc=sage,dc=com
objectclass:dcObject
objectClass: organization
o:sage
dc:sage
具体的实现:
RA部分:有关证书请求,撤消,验证等操作可以通过CGI发送请求至CA认证中心(在这里就不用审核了),而有关证书查询,下载可以通过PHP访问LDAP服务器(这个已经有文章介绍了)
CA部分:这部分主要是利用openssl API实现各类功能(请看利用openssl API生成证书)
LDAP部分:将CA部分生成的证书存入LDAP中,并且接受查询和下载(具体的LDAP相关文章中)
这个简单的CA中心只是演示了一下过程,所以不成熟和错误的地方请原谅。建议还是在linux下建立,在用户访问网页时实现https连接。