CA认证中心统计查询系统论文CA认证中心统计查询系统论文 石家庄铁道学院毕业设计 1 绪论 1.1 问题的提出 随着计算机应用的普及,特别是近年来Internet的发展,企业、政府、金融中心 等各家机构都通过与Internet相连的网络发布信息,使用电子邮件和其他网络应用程 序以及开展电子商务等。随着这些机构规模的扩大和分布式应用的不断增加,他们需 要统一的身份认证与访问控制机制,并且能够在其网站上实现单点登录。同时,由于 Internet建立在开放的TCP/IP协议基础上,消息在网络上以数据包的形式传输,这些 数据包通过选择最佳的路...
用户名已经存在,请重新选择用户名!" 用户注册的界面如下所示: 27 石家庄铁道学院毕业设计 图6-1 注册信息填写图 6.2.3 根证书下载 点击”根证书下载”会弹出对话框提示用户下载根证书,按下保存键即可将根证书下载到本机。此时下载的是压缩包xiang.rar,释放后将得到自签名的根证书,如图 6-2所示。这时的根证书是不受信任的, 它不能验证个人证书是否真实,所以需要安 装此证书。 28 石家庄铁道学院毕业设计 图6-2 不受信任的根证书 要想使之可信需单击”安装证书”按钮,进入证书导入向导,按提示安装根证书完毕后,将根证书存储在用户受信任的根证书颁发机构的证书库中,即得到受信任的 根证书,如图6-3所示。 图6-3 受信任的根证书 29 石家庄铁道学院毕业设计 6.2.4 证书申请功能 我们的系统提供了在线和离线两种证书申请方式,用户可根据各自不同的情况加 以选择。 6.2.4.1 证书在线申请 CA通过Web页面为最终用户提供在线申请服务,申请过程采用了PKCS#10认证请求格式和PKCS#7响应方式。在线申请为最终用户创建的PKCS#10认证请求包括最终用户名、电子邮件、身份证号和所属部门等内容以及最终用户的公开密钥信息;而 PKCS#7响应方式则包括了从根CA到最终用户的证书层次链之间的所有证书。 我所设计的Web页面中含有的脚本程序通过C++用户接口调用浏览器底层的登记 控件;动态链接库和加密模块(Cryptographic Modules)为最终用户产生私有密钥/公开密钥对,并向Web服务器提交用户的身份信息和公开密钥。一但CA成功的为用户签发证书之后,Web页面同样使用C++用户接口将PKCS#7格式的消息传导入用户的 浏览器中。在线申请的页面如下: 图6-4 个人信息填写图 客户端可以对输入的信息作非空以及e_mail地址的格式进行验证,这样可以提 高效率,避免提交到服务器端在发现格式不正确,再返回给客户端重新填写,节省了 网络资源。 30 石家庄铁道学院毕业设计 如果输入满足条件则系统调用CEnroll控件将信息处理成PKCS#10标准的证书请求格式,PKCS#10证书请求可以包括证书请求者的名字、证书请求者的公钥和其 他的一系列可选的属性组成。先定义要包含的个人基本信息,如示: DNName = "CN=" & theForm.name.value + ",E=" & theForm.email.value + ",O=" & theForm.orgnization.value + ",OU=" & theForm.city.value + ",Description=" & theForm.page.value DNName符合X.500命名转化标准的,类似于"CN=User, O=Microsoft"。 定义对个人信息做消息摘要时采用的哈希算法: enroll.HashAlgorithm = "MD5" 利用Cnroll控件的CreatePKCS10方法将请求信息生成消息摘要并用个人的私钥 签名,再将签名后的消息摘要转化成base64编码的PKCS#10标准的证书请求格式。Base64编码就是把3个8bit的字节分为4段6bit,然后在每个前面添2个零,把证书请求信息转化成Base64编码是便于在网上传输。 编码后的证书请求被发送到证书颁发机构(CA),并保存在证书服务器中,如示: mCmd.CommandText="INSERTINTOCAREC (id,name,email,jibie,pkcs10,cflag,flag2,certtime) VALUES('"&id&"','"&name&"','"&email&"','"&jibie&"','"&pkcs10&"','1','2','"&certti me&"')" mCmd.CommandText = "INSERT INTO user (id,password,city,num,department) VALUES ('"&id&"','"&usepw&"','"&usercity&"','"&jibie&"','"&userdepartment&"')" 若封装后的个人信息经CA操作员审核无误,CA就可以为用户制作X.509证书了。 6.2.4.2 证书离线申请 系统提供的离线证书申请服务是由CA操作员直接向CA服务器输入最终用户的身份信息,选择相应的密钥生成算法与密钥对长度生成密钥,并提交证书申请。一但 CA操作员提交了证书申请,CA相应的服务程序将会创建PKCS#10请求消息。与在线申请相比,离线申请不需要用户直接干预,也不需要通过Web服务器进行证书请求登记,而是由CA操作员直接根据最终用户的书面请求进行申请,其身份验证是通过严 格的面对面检查,而且离线申请证书的密钥对长度不受现有浏览器限制,可以根据需 要选择任意密钥长度或加入更多的密钥生成算法,离线证书申请与下载的具体流程如 下: ?最终用户向CA提交书面申请,并选择相关密钥生成算法和密钥对的长度; ?CA操作员对申请进行审核,要求其出示相关证明文件; 31 石家庄铁道学院毕业设计 ?CA操作员输入用户信息,根据用户要求产生密钥对并提交用户申请; ?CA操作员下载个人信息文件,并通过安全的方式传给最终用户。 离线 申请表 食品经营许可证新办申请表下载调动申请表下载出差申请表下载就业申请表下载数据下载申请表 需填写的主要内容如下: 表6-1 离线申请表 证书基本信息 用户基本信息 证书有效期 10年 省份 河北省 加密算法 RSA、MD5 城市 石家庄 身份证号码 *************** 单位名称 石家庄铁道学院 密码 ------------ 部门名称 计算机系 证书类型 个人数字证书 用户姓名 张翔 申请人签名盖章: 性别 男 电子邮件 zh_xiang@163.com 6.2.5 证书下载功能 用户登录网站,下载自己申请的证书。在文本框中填入申请时返回的序列号和自 己设置的密码,按下提交转向下一处理页面。输入页面如下: 图6-5 下载证书需填写的内容 如果密码正确则通过输入证书申请时返回的序列号来查询证书的状态。如果此时 请求尚未批准则弹出:“您的请求尚未经过审批,请耐心等待。”由于身份不符等原因 造成申请失败则弹出: “您的请求未获批准,请重新审核你的材料”。如果此时请求 已获批准则弹出: “您的证书已获准颁发!请安装此证书。点击”安装此证书”,按对话框提示进行安装,即可把个人证书保存到本地系统的CSP中。主要代码如下: Sub AcceptCert 32 石家庄铁道学院毕业设计 <%'=PKCS7%> sPKCS7="" <%=sPKCS7%> sPKCS7=sPKCS7 & "-----END CERTIFICATE-----" & vbNewLine On Error Resume Next Enroll.getCertFromPKCS7(sPKCS7) Enroll.acceptPKCS7(sPKCS7) If 0 = err.Number Then Alert "您申请的证书已经下载并且安装成功!" Else If Err.Number=&H80092004 Then Alert "不能安装此证书:与此证书相关的专用密钥找不到或者证书已经安装。" Else Alert "不能安装此证书:请验证您的 CSP 设置。" End If End If End sub 安装完毕后就可以从CSP中导出个人证书,该证书采用base64进行编码,编码 后的证书如下: -----BEGIN CERTIFICATE----- MIIDgzCCAuygAwIBAgIBFjANBgkqhkiG9w0BAQQFADB5MXcwEQYDVQQDEwp6aGFu Z3hpYW5nMBgGA1UECxMRY29tcHV0ZXIgc2NpZW5jZSAwHwYJKoZIhvcNAQkBExJ6 aF94aWFuZzExQDE2My5jb20wJwYDVQQKEyBzaGlqaWF6aHVhbmcgcmFpbHdheSBp bnN0aXR1dGlvbjAeFw0wNTA2MDExMjQ5NTdaFw0xNTA2MDExMjQ5NTdaMHcxDTAL BgNVBAMeBF8gf9QxHzAdBgkqhkiG9w0BCQEWEHpoX3hpYW5nQDE2My5jb20xFzAV BgNVBAoeDnfzW7ZehJTBkFNbZpZiMQ8wDQYDVQQLHgZTBVk0XgIxGzAZBgNVBA0T EjE1MDIwNDE5ODIxMjIzMDkzOTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA yT4EDT6IH5hDjvmdANioV3QKdITjEmOlBuMx1toeDQj3+VGL0v/w6CzuBV2yeXD7 DnRaTgmcv/rpAVms8pEPmbIiA3r2Ei2b94yibtQ1al/fIQRmo20S17jzCKjW2zZA dtwKSM6EcnuJyt0wl0Pdwh5+5o24VbU2KHbGRt2o3+MCAwEAAYF8ADB5MXcwEQYD QQDEwp6aGFuZ3hpYW5nMBgGA1UECxMRY29tcHV0ZXIgc2NpZW5jZSAwHwYJKoZI hvcNAQkBExJ6aF94aWFuZzExQDE2My5jb20wJwYDVQQKEyBzaGlqaWF6aHVhbmcg cmFpbHdheSBpbnN0aXR1dGlvboJ6ADB3MQ0wCwYDVQQDHgRfIH/UMR8wHQYJKoZI 33 石家庄铁道学院毕业设计 hvcNAQkBFhB6aF94aWFuZ0AxNjMuY29tMRcwFQYDVQQKHg5381u2XoSUwZBTW2aW YjEPMA0GA1UECx4GUwVZNF4CMRswGQYDVQQNExIxNTAyMDQxOTgyMTIyMzA5Mzmj IzAhMBAGA1UdCgEB/wQGMAQDAgZAMA0GBIpfQlgBAf8EAmNzMA0GCSqGSIb3DQEB BAUAA4GBAJ+rioJq70flrtVtd/YYkXV4PNCkmPYfTLqhipNjFauBJkR9ASjDnhSd 1filVeEzhPIsH0ssQdhAZPVuHZY8Hv3kmT6XgTYs9yPBSNCxo+O323QzCAX3P1yL /sFNrYfQHDoMSPGit94RTqg9K6Cfc60o0HxJk9CX6PsagRi7rn8d -----END CERTIFICATE----- 这就是用户所申请的个人证书。此证书和相应的私钥保存在本地的密钥容器中, 私钥也可以导出到外部介质中,但必须妥善保存。 6.2.6 吊销列表查询下载功能 点击下载吊销列表就会转向如下页面,该页面列出了最新发布的所有已被撤销的证书信息,用户可以下载到自己的磁盘上。 图6-6 吊销列表查询下载图 点击下载证书吊销列表按提示操作,即可把吊销列表保存到自己的硬盘上。吊销 列表如下所示: 34 石家庄铁道学院毕业设计 图6-7 吊销列表 点击“吊销列表”选项则显示出已经吊销了的证书,包括证书序列号和吊销的时 间,证书ID转化为十六进制显示。 6.2.7 留言板功能 留言板的建立主要有三个内容。一个是向数据库写入资料;二是从数据库读出资 料并且把它显示在浏览器上;第三就是留言板必须具有的分页功能。 6.2.7.1 权限设置 留言板分为两个权限。 其一,普通用户权限。只可留言不可修改和回复,留言的信息倒序排列,即最新发表的言论处于页面最上端,界面如下: 35 石家庄铁道学院毕业设计 图6-8 留言板主页 其二,为管理员权限。输入管理员的名字和密码后就可以实现对留言的管理和维 护(见下图) 。 ?回复用户或游客的留言: 图6-9 回复界面 36 石家庄铁道学院毕业设计 ?删除用户留言: 图6-10 删除界面 6.2.7.2 分页功能 如果留言太多导致一页显示不下,则需对留言分页显示。设计思路如下:定义变 量absPageNum:当前页为第几页,TotalPages:总的页数,absRecordNum:当前页 中某一条记录的序号,RecordPerPage = 6:定义每页显示的记录数为6。 确定所输出数据的当前页码,如果没收到表单递交的数据(如首次加载该页时), 则从第 1 页开始显示,否则根据表单中是“上一页”还是“下一页”来显示。代码 如示: If Request.ServerVariables("CONTENT_LENGTH") = 0 Then absPageNum = 1 '当前为第一页 Else absPageNum = CInt(Request.Form("PressPageNum")) If Request.Form("Submit") = "上一页" Then absPageNum = absPageNum - 1 ElseIf Request.Form("Submit") = "下一页" Then absPageNum = absPageNum + 1 End If End If 定义记录集对象rs的属性: rs.PageSize = RecordPerPage '设置每一页的记录数 rs.AbsolutePage = absPageNum '当前是第几页 TotalPages = rs.PageCount '总页数 For absRecordNum = 1 to rs.PageSize 37 石家庄铁道学院毕业设计 Next '用循环输出当前页设定的几条数据 6.3 服务器端证书制作和管理模块 总述: 服务器端的设计首先应输入私钥密码(见下图) 图6-11 CA操作员登录界面 如密码正确则进入主页面,主页面显示了所有证书的信息包括:提出请求的证书,已颁发的证书,已吊销的证书和申请失败的证书。如图所示: 图6-12 服务器端主界面 38 石家庄铁道学院毕业设计 6.3.1 模块技术支持 CryptoAPI在系统中的应用: 微软CryptoAPI是一组数目众多的安全函数,这些安全函数是Windows操作系统的一部分。CryptoAPI对密码函数进行抽象,隐藏了实际实现的细节,CryptoAPI实事上可以通过密码服务供应商(CSP)以多种方法实现同一密码函数。CSP是一个独立的模块,它实现了那些可以通过CryptoAPI公共接口访问的密码函数,换言之,CSP封装和隐藏了密码算法的具体实现,这样用户就不需要去关心它。微软提供了一个基 本CSP,其他商家提供的CSP包含了他们自己实现的全部或部分CryptoAPI函数。 CryptoAPI提供了如下通用领域的函数: ?基本密码函数支持选择、初始化和终止CSP。这些函数也包含了用于生成、交 换和存储密钥的密钥操作函数。其他函数包括了对象编码解码、数据加密解密、摘要 生成、数字签名生成和验证。 ?证书和证书存储函数管理证书集合、证书撤销列表和证书信任列表。 ?证书验证函数支持证书信任列表(CTL)和证书链的处理,如将CTL放入签名消息和验证证书链中。 ?消息函数处理PKCS#7消息,其中消息函数专门用于消息构造。消息函数的功 能包括加密或解密消息及消息数据,签名消息和消息数据,还有验证签名消息。低层 消息函数直接对PKCS#7消息操作。CryptoAPI还包含了把一些低层函数封装起来的 高层消息函数集合,如CryptSignAndEncryptMessage函数,在一次API调用中,它就完成PKCS#7格式化、加密和签名。 ?辅助函数包括其他不便归类的函数。有处理证书扩展、比较证书属性以及对象 ID操作函数。 6.3.2 个人证书的制作 CA操作员根据最终用户的在线申请或操作员提供的离线申请创建相应类型的数 字证书,并且选择CA根证书的私有密钥对证书进行数字签名以保证证书的真实性和 完整性。 证书颁发的过程就是先从证书数据库中提取出PKCS#10 证书请求信息,然后从PKCS#10的证书请求中解码出用户的信息和公钥,再根据这些用户信息制作用户证 书,并使用根证书的私钥对证书进行签名。如果申请被拒绝,则在证书数据库中把申 请条目标记为申请失败。如下图所示,可以对某项证书请求颁发证书或者扔掉该请求。 39 石家庄铁道学院毕业设计 图6-13 颁发证书 选择颁发证书: 图6-14 颁发提示 将数据库中的pkcs10块转化为base64格式的证书,具体实现如示: ?把pkcs10消息解码成二进制的der编码,并存储在文件base.der中。DER是 对ASN.1对象进行编码的一种方式,是ASN.1标准的重要部分。 WinExec("certutil-decode .\\temp\\base.txt .\\temp\\base.der",SW_MINIMIZE); ?将二进制der编码的信息解码成内存中的数据结构: CryptDecodeObjectEx( PKCS_7_ASN_ENCODING |X509_ASN_ENCODING, X509_NAME, pCertReqInfojie->Subject.pbData, pCertReqInfojie->Subject.cbData, CRYPT_DECODE_NOCOPY_FLAG, NULL, pbDecoded3, &cbDecoded3) pDecodeName3 = (CERT_NAME_INFO *)pbDecoded3; pDecodeName3是解码的结果,以CERT_NAME_INFO的形式存储,其中CERT_NAME_INFO是存储证书主题或发行名称的结构体。 ?将从pkcs10消息块解码得到的证书请求结构和证书主题来构造base64格式的 证书。 CryptEncodeObject( X509_ASN_ENCODING, 40 石家庄铁道学院毕业设计 X509_NAME, pDecodeName3, pbNameEncoded, &cbNameEncoded) pbNameEncoded便是对证书主题进行编码后得到的信息。 ?连接加密设备上下文,获得指定CSP密钥容器的句柄。 CryptSetProvider(MS_ENHANCED_PROV ,PROV_RSA_FULL); CryptAcquireContext( &hCryptProv, NULL, NULL, PROV_RSA_FULL, NULL)) ?读取根证书的私钥,保存在pbKeyBlob中。 FILE*hSource; hSource= fopen(sifile,"rb") fread(&dwKeyBlobLen, sizeof(DWORD), 1, hSource); if(ferror(hSource) || feof(hSource)) pbKeyBlob = (BYTE *)malloc(dwKeyBlobLen) fread(pbKeyBlob, 1, dwKeyBlobLen, hSource); ?对证书的基本信息赋值,包括证书的版本号、序列号、发行者的信息、加密算 法、公钥信息、颁发时间、到期时间和证书的主题。 ?定义证书的扩展域; 定义基本限制扩展域,定义证书的基本限制是终端实体。 定义证书的用法,证书的用法是既能签名又能加密。 ?连接加密设备上下文,获得指定CSP密钥容器的句柄,用根证书的私钥进行签 名得到证书。 CryptSignAndEncodeCertificate( hCryptProv, AT_SIGNATURE, X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED, &cert, 41 石家庄铁道学院毕业设计 &cert.SignatureAlgorithm, NULL, pbSignedEncodedCertReq, &n) ?把产生的证书转化成base64的pkcs 7消息: WinExec("certutil -encode .\\temp\\ca.cer .\\temp\\cabase.txt",SW_MINIMIZE); 更新数据库的信息,将产生的pkcs 7消息存放在数据库中。 m_pFieldPtr = m_pFieldsPtr->Item["pkcs7"]; ?把base64证书存放到数据库的pkcs7的列中。 m_pFieldPtr->Value=(_variant_t)base64; m_pUserSet->Update();//更新记录集 6.3.3 拒绝证书申请功能 如果证书申请者的信息得不到验证,则拒绝颁发证书,把失败的证书请求放到“失 败的证书栏中”。将要扔掉的那个请求的标志位cflag置为4即可;代码如下: CString sql = "select * from CAREC where id="; CString str =m_data.GetItemText(nItem,0); sql +=str; m_pUserSet->Open((_variant_t)sql, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); m_pFieldsPtr = m_pUserSet->Fields; m_pFieldPtr = m_pFieldsPtr->Item["cflag"]; m_pFieldPtr->Value=(_variant_t)4; m_pUserSet->Update(); m_pUserSet->Close(); 6.3.4 吊销证书功能 对于已经颁发的证书,由于证书失效和私钥泄漏等原因造成的证书不再受信,为 了保证安全性必须对证书进行吊销,即在证书数据库中把相应的条目标记为吊销。 ?证书过期 42 石家庄铁道学院毕业设计 SJZRI.CA为最终用户创建证书时根据证书实施策略确定了证书的有效期。证书 到了失效日期之后就立刻被认为是过期证书,最终用户将不能再使用该证书进行身份 验证或用于其他目的,而且依赖方也将不再信任该证书。 ?证书撤销 证书撤销是CA在最终用户的证书自然到期之前作废证书,撤销的原因包括与证书公开密钥相对应的私有密钥的泄漏或失窃、最终用户的身份信息变更、企业员工离 开工作岗位以及证书不再用于现有的用途而要求中止使用等多个方面。 本系统提供了两种方式接收证书撤销申请,一种是由最终用户在Web服务器上提交撤销请求并声明证书撤销的具体原因;另一种方式主要是针对一些紧急的撤销要求, 比如用户发现自己的私钥被泄漏,可以通过电话或面对面的方式请求CA操作员立刻发布证书撤销信息。如果撤销者的身份通过验证并且撤销请求符合认证实施说明的相 关规定,CA操作员将通过系统的证书撤销程序对证书进行撤销。界面如下: 图6-15 吊销证书图 String sql = "select * from CAREC where id="; CString str =m_data.GetItemText(nItem,0); sql +=str; m_pUserSet->Open((_variant_t)sql, heApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); m_pFieldsPtr = m_pUserSet->Fields; m_pFieldPtr = m_pFieldsPtr->Item["cflag"]; m_pFieldPtr->Value=(_variant_t)3; m_pUserSet->Update(); m_pUserSet->Close(); OnBnClickedfinish(); 6.3.5 吊销列表的制作 43 石家庄铁道学院毕业设计 吊销列表的生成是把所有吊销了的证书都放到证书吊销列表(*.crl)文件里,同时存放到数据库中以供下载。把每一个吊销了的证书的序列号加入CRL,并对其进行数字签名以保证CRL的真实性和完整性。本系统签发的CRL具体字段及相关说明如表6-2所示: 表6-2 CRL字段表 字段名 说明 Version CRL版本号 Signature Algorithm CA对CRL签名所使用的算法标志 Issuer CA Last Update 本次CRL的签发时间 Next Update 下次CRL的签发时间 Revoked Certificates 撤销的证书列表 Extentions CRL相关扩展 Signature CA对CRL的数字签名 与证书签发模块类似,CA在完善CRL基本项的同时也充分使用了扩展项,它指出了证书撤销的理由以及证书失效日期;并通过PULL和PUSH两种方式发布。PULL指CA预先公布CRL的发布时间及分布点,由最终用户和依赖方定期从分布点下载或查 询;PUSH是指CA在产生CRL的同时立刻通过邮件列表等消息广播方式主动地向最终 用户和依赖方发送CRL。 CA提供了多种CRL格式,包括PEM格式,DER格式和文本方式前两种格式用于用户 下载并直接导入到浏览器或其它的应用程序中,而后者允许用户可直接查看CRL的详细信息,本系统采用PEM格式进行CRL的发布。生成吊销列表的对话框如下: 图6-16 生成吊销列对话框 实现过程: ?打开根证书的私钥文件,并用根证书的私钥对吊销列表进行签名,以保证吊销 列表的有效性和安全性; FILE*hSource; hSource= fopen(sifile,"rb"); fread(&dwKeyBlobLen, sizeof(DWORD), 1, hSource); 44 石家庄铁道学院毕业设计 pbKeyBlob = (BYTE *)malloc(dwKeyBlobLen) fread(pbKeyBlob, 1, dwKeyBlobLen, hSource); ?从数据库中查询需要吊销的证书(即标志位为3的证书),定义吊销列表信息CRL_ENTRY的指针*pEn,并初始化吊销列表的各个吊销的证书信息; CRL_ENTRY *pEn pEn[nTempCer].SerialNumber=Int1; pEn[nTempCer]. RevocationDate=lf; pEn[nTempCer].cExtension=0; pEn[nTempCer].rgExtension=NULL; ?初始化吊销列表信息结构,包括版本号、发行者信息、此次发布的时间、下次 更新的时间、所采用的算法和扩展项等信息; ?连接加密设备上下文,获得指定CSP密钥容器的句柄; ?用根证书的私钥进行签名得到吊销列表; CryptSignAndEncodeCertificate( hCryptProv, AT_SIGNATURE, X509_ASN_ENCODING, X509_CERT_CRL_TO_BE_SIGNED, &crl, &crl.SignatureAlgorithm, NULL, pbSignedEncodedCertReq, &n) ?使用certutil工具把吊销列表转化为base64的 WinExec("certutil-encode .\\temp\\c.crl .\\temp\\base64.crl", SW_MINIMIZE); ?将base64编码的证书吊销列表保存在数据库中。 6.3.6 根证书的制作 本程序生成根证书和根证书的私钥文件(root.cer和root.t)。在使用证书制作 和管理程序前,必须先使用这个程序制作根证书和对应的私钥文件,然后才能对个人 证书进行签名。系统的根证书是自签名证书,即使用自己的私钥进行签名。本程序使 用VC++开发,使用了CryptoAPI编程接口。制作根证书的时候用户需要输入根证书 实体名称、对应的E-mail、还要选择对应的CSP和设置加密位数。 45 石家庄铁道学院毕业设计 具体设计如下: ? 新建一基于对话框的项目,往窗体中添加控件如下图所示: 图6-17 根证书生成图 ?将输入的根证书信息(name和email)存放在专门存储证书主题或发行者名称 的数据结构中; name1=(char*)m_name.GetString(); email1=(char*)m_email.GetString(); strfile=m_cafile;//存放证书的文件 ?定义和初始化CERT_RDN_ATTR数组; CERT_RDN_ATTR rgNameAttr[] = { { szOID_RSA_emailAddr , // pszObjId CERT_RDN_PRINTABLE_STRING, // dwValueType strlen(email1), // value.cbData (BYTE*)email1 }, { szOID_COMMON_NAME, // pszObjId CERT_RDN_PRINTABLE_STRING, // dwValueType strlen(name1), // value.cbData (BYTE*)name1 46 石家庄铁道学院毕业设计 } }; // value.pbData 定义和初始化 CERT_RDN 数组;在这段代码中,数组中只有一个元素。 CERT_RDN rgRDN[] = { 2, // rgRDN[0].cRDNAttr rgNameAttr }; // rgRDN[0].rgRDNAttr // 定义和初始化 CERT_NAME_INFO结构。 CERT_NAME_INFO Name = { 1, // Name.cRDN rgRDN}; // Name.rgRDN ?对用CERT_NAME_INFO结构存储的根本信息进行编码; ?连接加密设备上下文,获得指定CSP密钥容器的句柄; CryptSetProvider(MS_ENHANCED_PROV ,PROV_RSA_FULL) CryptAcquireContext( &hCryptProv, // Address for handle to be returned. NULL, // Use the current user's logon name. NULL, // Use the default provider. PROV_RSA_FULL, // Need to both encrypt and sign. NULL) // No flags needed. 如果未找到数字签名密钥对,则试图创建一个数字签名密钥对。 CryptGenKey(hCryptProv,AT_SIGNATURE,CRYPT_EXPORTABLE,&hKey) ?将私钥导出并且存储在文件中; CryptExportKey( hKey, NULL, PRIVATEKEYBLOB, 0, pbKeyBlob, &dwBlobLen) fwrite(&dwBlobLen, sizeof(DWORD), 1, sifile); fwrite(pbKeyBlob, 1, dwBlobLen, sifile); ?将公钥导出并与根证书绑定在一起; CryptExportPublicKeyInfo( 47 石家庄铁道学院毕业设计 hCryptProv, // Provider handle AT_SIGNATURE, // Key spec X509_ASN_ENCODING, // Encoding type pbPublicKeyInfo, // pbPublicKeyInfo &cbPublicKeyInfo) // Size of PublicKeyInfo cert.SubjectPublicKeyInfo=*pbPublicKeyInfo; ?对证书的基本信息赋值,包括证书的版本号、序列号、发行者的信息、加密算 法、公钥信息、颁发时间,到期时间和证书的主题。 ?用根证书的私钥进行自签名,用CryptSignAndEncodeCertificate方法对一个证 书、证书吊销列表或证书请求进行签名和编码,这个函数可以执行以下的操作: 调用CryptEncodeObject对将要签名的信息编码; 调用CryptSignCertificate对编码后的信息签名; 再次调用CryptEncodeObject进一步对签名后的信息编码; CryptSignAndEncodeCertificate( hCryptProv, // Crypto provider AT_SIGNATURE, // Key spec X509_ASN_ENCODING, // Encoding type X509_CERT_TO_BE_SIGNED, // Struct type &cert, // Struct info &cert.SignatureAlgorithm, // Signature algorithm NULL, // Not used pbSignedEncodedCertReq, // Pointer &n) // Length of the message ?将签名编码后的信息写入证书文件。 WriteFile(hf, pbSignedEncodedCertReq,n,&n,NULL); 程序运行的界面如下图所示: 48 石家庄铁道学院毕业设计 图6-18 成功生成根证书 6.4 数据库模块 6.4.1 数据库的连接 本数据库采用ADO的方式进行连接。 Active Data Objects(ADO)作为另一种可供选择的技术出现,正在逐渐代替其他数据访问接口。Active数据对象(Active Data Objects)实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。它可以使用任何 一种ODBC数据源,即不止适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数 据访问接口方法。由于RDO同ADO的体系结构非常相似,因此当需要将RDO数据接口转换为ADO时,仍可以使用RDO设计的代码。ADO是独立于开发工具和开发语言的简单而且容易的数据接口,同ADO相比,其他数据访问接口都会黯 然失色。 用 ADO 控件可以灵活地控制数据,不必编写代码就可以方便的显示 数据,大大简化了程序设计。ADO 高速访问数据源,对于实时数据库来说,非 常好的满足了读取和处理上的时间要求;在程序中对数据进行检查,保证了数 据在网络中传输的准确性。 ?在ASP中连接数据库如下所示: 首先定义连接字符串: cnstr="Driver={Microsoft Access Driver (*.mdb)};DBQ=" & 49 石家庄铁道学院毕业设计 Server.MapPath("ca.mdb") ca.mdb是要连接的数据库名。 Set mCmd = Server.CreateObject("ADODB.Command") mCmd.ActiveConnection = cnstr mCmd.CommandText set rs=mCmd.Execute ?在VC中连接数据库 创建连接字符串: CString strOpen ="Driver={Microsoft Access Driver (*.mdb)};DBQ=CA\\ca.mdb;UID=;PWD=;"; 建立连接数据库的实例: m_pConnection.CreateInstance(__uuidof(Connection)); 打开连接: m_pConnection->Open((const char *)strOpen,"","",-1); 打开记录集: m_pUserSet->Open((_variant_t)sql, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); 其中变量sql是要执行的sql语句。 6.4.2 表的构建 ?表Carec: 表Carec中输入的内容有:序列号(id)、姓名(name)、电子邮箱(email)、身份 证号(jibie)、个人申请信息封装(pkcs10)、颁发的证书的封装(pkcs7)、当前证书的 状态(cflag)、加密或者签名的标志(flag2)和证书申请的时间(certtime)。 50 石家庄铁道学院毕业设计 图6-19 表Carec ?表Caroot: 表CARoot中存储着SJZRI.CA生成的根证书,由于本系统采用的是单一的层次结构;所以根证书需要自签名。将生成的根证书用CA的私钥进行签名,然后经base64 编码后存入库中其内容以BEGIN CERTIFICATE起,END CERTIFICATE结束。 图6-20 表Caroot ?表crl: 表crl保存生成的吊销列表的信息,数据库中存储的是已吊销的证书的详细信息 并付着SJZRI.CA私钥的签名,它经过base64编码后存储在crl库中,其编码以BEGIN 起,END结束。图6-21显示出CRL在数据库中的存储,将吊销列表编码后存入库的语句如下: m_pFieldPtr = m_pFieldsPtr->Item["crl"]; 把base64crl存放到数据库的crl的table里: m_pFieldPtr->Value=(_variant_t)CrlBase64; m_pUserSet->Update();//更新记录集 m_pUserSet->Close();//关闭记录集 UpdateData(false); 图6-21 表crl 51 石家庄铁道学院毕业设计 ?表user: 表user中保存的用户申请信息有:序列号(id)、用户密码口令(password)、省份 (province)、城市/地区(city)、公司/团体(company)、部门/机构(department)、性别(sex)。 图6-22显示出用户注册信息在数据库中的存储,使用如下语句将上述信息插入到数据 库中: mCmd.CommandText = "INSERT INTO user (id,password,city,num,department) VALUES ('"&id&"','"&usepw&"','"&usercity&"','"&jibie&"','"&userdepartment&"')" mCmd.Execute 图6-22 表Carec 52 石家庄铁道学院毕业设计 7 创新点 系统客户端使用基于Web的系统平台,免除了客户端安装,软件维护、升级简单 易行;服务器端采用VC++开发技术,安全性强,速度快,适合处理大量的数据。使 用cenroll组件及croptoAPI密码库,和windows自带的CSP完美结合。本系统在技术先进性、可维护性、经济性、系统可扩展性、安全性等多个方面满足了小型企业的 要求,主要有以下几个创新点: ?数据安全传输 如果用户的口令以明码的方式在网络上传输,很容易被非法截获,而且密码未经 加密便存入数据库,让无关人员看到,便会泄露用户的信息,后果不堪设想,所以使 用VC++实现了客户端用户口令MD5的加密传输。加密后的信息以乱码的形式存储在 数据库中,这样口令即使被截获,得到的也是一些乱码没有应用价值。 ?简洁的查询方式 表格用于显示诸如吊销列表的查询等信息,简单、直接;不论是谁登录系统网站 都可查询出当前所有证书的状态。系统提供了众多查询模式如按地区、序列号、性别 等分类查询,还在一定程度上实现了模糊查询以方便用户使用。 ?多重权限管理机制 本系统为普通游客、高级用户、管理员设置了不同的使用权限,既保证了系统的 安全性也使操作更为便捷。 ?注册权限:经过网上注册后的高级用户才可进行在线申请,普通游客只可进行 诸如证书状态查询、吊销列表查询、网上留言等功能。 ?留言板使用权限:普通用户只可发表评论,系统管理员则可对其进行修改、插 入、删除、回复等操作。 ?CA超级管理员权限:他是级别最高的系统管理员只有他才可以制作CA根证书 (根证书也可由上级CA颁发)。 ?CA操作员权限:普通的CA操作员可以进行用户身份审核、颁发个人数字证书、 周期性发布吊销列表等操作。 ?多种安全机制 系统使用了大量的安全策略来保证系统的安全性。如周期性发布吊销列表避免因 证书过期引起的损害,不断更新根证书避免安全隐患。 ?系统的标准化 系统所使用的标准都是当今的主流,简明易懂且易于维护。多种协议标准的使用 使系统更加规范,系统使用的标准主要有:PKCS#1、PKCS#7、PKCS#10、ASN.1规范、 53 石家庄铁道学院毕业设计 X.509、安全HTTP(S/HTTP)协议等。 ?便捷的二次开发接口 本系统无论是函数命名还是代码编写都具有极好的可读性,为了方便以后进行功 能扩展,我们最大限度地对每一个功能模块进行了封装基本实现了对外透明,这样如 果进行二次开发便可直接拿来使用或继承。 ?注重效率 在客户端对输入的信息作非空以及e_mail地址的格式进行验证,这样可以提高效率,避免提交到服务器端在发现格式不正确,再返回给客户端重新填写,节省了网 络资源。 54 石家庄铁道学院毕业设计 8 测试分析 8.1 系统的配置 本系统可以用于企业、银行、政府等大型机构对CA的需求;也可用于诸如学校等中小型部门的网络安全。为了能在离线的情况下模拟它的使用,首先必须配置IIS 虚拟服务器。单击“开始”菜单从“程序”的级联菜单中选择“管理工具”项,单击 “Internet服务管理器”弹出如图8-1所示对话框: 图8-1 IIS配置图 打开“Internet信息服务”下的*zhang文件,右击其中的“默认Web站点”,选 择其中的“新建虚拟目录”弹出如图5-2所示“虚拟目录创建向导”按文字提示操作 即可以完成对虚拟服务器的配置,通过这项服务用户就可以不必在线而模拟网上申 请、根证书下载、个人数字证书下载、吊销列表下载、时时在线查询系统等工作流程 了。 8.2 系统测试 测试分析是为了进行单元测试、组装测试和功能测试,并将结果、发现及分析写 成文档加以记载。前面几章针对SJZRI.CA的应用模型及实现过程中涉及的关键问题 进行了研究,这些研究成果在老师和同学间经过反复测试已被证明具有一定的实用性 和稳定性。由于时间和人力资源的限制我们系统最佳的服务对象是诸如学校、超市、 事业单位、小型企业等中小型机构,根据这些机构的实际特点以及应用规模,在具体实 现过程中我们采用了严格层次的CA模型,并为今后大规模的开发提供了通用接口。如 55 石家庄铁道学院毕业设计 涉及与其它CA认证中心之间进行通信,则可通过交叉认证为其他CA签发交叉CA证 书。目前,该系统的各项功能已经实现,主要有: ? 签发自签名的根证书; ? 签发个人数字证书; ? 查询和下载吊销列表; ? 受理和审核用户的申请; ? 支持用户的在线查询; ? 管理全系统的用户和证书资料; ? 签发证书吊销列表; ? 维护全系统的证书吊销列表。 具体测试如下: ?前台测试 ?注册用户 输入:用户名、真实姓名、性别、取证书时的密码、省份、城市/地区、公司/ 团体、等用户信息。 输出:显示注册是否成功,如注册失败弹出提示对话框。 测试结果:正常注册,满足要求。 ?用户登陆 输入:注册的用户名,注册的密码。 输出:如输入正确则在网站首页的“服务直通车”下显示出用户注册的名字。 测试结果:正确显示,满足要求。 ?证书在线申请 输入:持证人姓名、用户E-mail等个人信息,这些信息需如实填写,CA操作员 将根据这些信息制作证书。 输出:提示申请成功,返回序列号,等待证书颁发,否则报错。 测试结果:符合要求。 ?根证书下载 输入:无 输出:提示下载,若系统异常则报错。 测试结果:按预期显示。 ?证书下载 输入:申请时填写的序列号,申请时的密码。 输出:如证书已颁发,提示用户下载;如未颁发提示用户耐心等待。 56 石家庄铁道学院毕业设计 测试结果:按预期显示。 ?吊销列表下载 输入:无 输出:查询出当前已经吊销了的证书,并提示用户下载。 测试结果:正确显示,可以安全下载。 ?证书申请表下载 输入:无 输出:提示下载申请表也可在当前打开,在线填写。 测试结果:可以安全下载。 ?后台测试 ?颁发证书 操作:右击将要颁发的证书,左击确定。 输出:从当前页面删除,在颁发的证书栏中显示。 测试结果:正确显示,颁发成功。 ?处理申请失败的证书 操作:右击申请失败的证书,左击确定。 输出:从当前页面删除,在申请失败的证书栏中显示。 测试结果:正确显示,成功处理。 ?处理想要吊销的证书 操作:右击想要吊销的证书,左击确定。 输出:从当前页面删除,在已吊销的证书栏中显示。 测试结果:正确显示,成功吊销。 ?生成吊销列表 操作:单击吊销列表按钮 输出:出现提示对话框,提示生成是否成功。 测试结果:成功生成吊销列表。 57 石家庄铁道学院毕业设计 9 结束语 随着计算机应用的普及,特别是近年来INTERNET的发展,企业、政府、银行等各家机构都纷纷建立与INTERNET相连的网络。为了保证企业应用在安全的网络环境下 进行,这些机构就必须实现交互的保密性、认证性、内容完整性、不可否认性、访问 控制\审计和易于使用性等安全服务。PKI通过公开密钥和数字证书技术提供了网络 安全服务的基础设施,CA作为其中的认证权威机构负责签发、撤销和管理个人服务 器和其他实体的证书。 本文从密码学基础、数字证书、功能组件和信任模型四个方面对PKI技术进行了深入的研究与探索,并针对PKI在企业中的实际应用,提出了一种基于严格层次结构 的CA模型,同时考虑了该层次CA在私有密钥的保护,最终用户的身份识别与认证, 证书操作规范和安全控制等方面应该制定的策略和措施。 本文还解决了基于严格层次CA模型实现过程中的各项关键技术问题:CA不仅能 够支持客户浏览器的在线申请,同时还提供了离线申请机制;CA根据不同用户申请使用证书签发程序创建相应的个人证书并对其进行签名;通过定期发布CRL的机制解决了证书撤销问题,并提供在线查询服务允许检验者实时地检查证书状态;增设留言 板功能方便用户、管理员之间的交流。 本系统所签发的证书能够为不同部门的多种应用程序提供安全服务,但同时还存 在着一些不足: ?过期密钥问题 一旦CA签发的证书过期,最终用户在证书有效期间的签名也将无法得到验证。 同时,如果用户在证书过期之后,忽视了对私有密钥的保护或者密钥对被攻破,这样 攻击者可以伪造出用户在证书有限期间内的数字签名。针对这种过期密钥问题,需要 对有效期内的签名提供安全时间戳服务,证明其准确的时间。 ?证书撤销的即时发布问题 由于CA通过定期发布CRL的方式解决证书撤销问题,但是对于一些紧急的证书 撤销,比如私有密钥泄漏或被窃取,如果CA不能立刻对外公布该证书已经被撤销, 就需要等到下一个发布周期。即使CA立刻通过PULL或PUSH方式发布CRL,这些操作也会带来一定程度的时延。如果在系统网站中建立OCSP(Online Certification Status Protocol,在线证书状态协议)服务器,这个问题将会得到很好地解决。最终 用户或CA操作员一旦提出有效地证书撤销请求,OCSP服务器将立刻更新证书状态信息,如果依赖方需要了解证书是否被撤销,只需要查询OCSP服务器,而不需要等到CA发布新的吊销列表。 58 石家庄铁道学院毕业设计 59 石家庄铁道学院毕业设计 参考文献 [1]C.Adams,S.Lloyd.Understanding Public Key Infrastructure[M].Concepts,Standards,and Deployment Consideration.Macmillan Technical Publishing,1999. [2]RFC 2459. R. Housley,W. Ford and etc. Internet X.509 Public Key Infrastructure : Certificate and CRL Profile [S],1999. [3]RFC 2527. S. Chokhani. Internet X.509 Publ ic Key Infrastructure: Certificate Policy and Certification Practices Framework [S],1999. [4]RSA Laboratory. PKCS #7v1.5: Cryptographic Message Syntax Standard[S],1993. [5]RSA Laboratory. PKCS #10 v1.7:Certificate Request Syntax Standard [S],2000. [6]汪晓平,吴勇强,张宏林.ASP 网络开发技术[M].北京:人民邮电出版社,2000.30~420 [7]宣小平,张文毅,但正刚.ASP数据库系统开发实例导航[M].北京:人民邮电出版社,2003.20~ 190 [8][美]Chuck Wood.VC++ 6.0数据库编程大全[M].北京:电子工业出版社,2000.150~280 [9]齐舒创作室.VC++ 6.0用户界面制作技术与应用实例[M].北京:中国水利水电出版社,1999. 170~430 [10]蔡永泉.计算机网络安全理论与技术教程[M].北京:北京航空航天大学出版社,2003.100~200 [11]卢开澄.计算机密码学—计算机网络中的数据保密与安全(第二版) [M].北京:清华大学出版 社,1998.320~500 [12]Scot Johnson . Active Server Pages 详解[M].北京:电子工业出版社,1999.120~180 [13]Bruce Schneier.应用密码学[M].北京:机械工业出版社,2001.60~230 [14]孙印杰,高翔,祝玉花. Dreamweaver MX 2004 中文版应用教程[M].北京: 电子工业出版社, 2005.250~400 [15]施威铭研究室.Microsoft Access 2002 中文版标准教程[M].北京:中国青年出版 社,2002.50~360 [16]汉清计算机工作室.Access 2000 中文版实例[M].北京:机械工业出版社,2000.120~300 60 石家庄铁道学院毕业设计 致谢 论文完成之际,我要对本论文完成过程中给予我帮助的人们致以最诚挚的 谢意! 首先要非常感谢我的指导老师郑丽娟在设计期间给予我的帮助和指导。感 谢她在我读书期间,特别是做毕业设计期间对我的严格要求和悉心教诲;感谢 她赐给我学习新知识、探索新问题的手段和创新的灵感;感谢她用自己的言行 为我树立了一名具有勤奋、刻苦、求实、创新精神的知识分子的典范,这将使 我终身受益。在此,向郑丽娟老师表示衷心的感谢和深深的敬意! 同时,我还要感谢系领导和机房老师,他们早来晚走,给我们提供了良好 的上机环境,为我们完成毕业设计提供了有力的保障。最后,我还要感谢我们 小组的成员给我的无私帮助。在设计期间,我们相互讨论,互相激励,共同完 成了此次毕业设计。可以说,这次毕业设计的完成,有着太多人的功劳,没有 他们的帮助,我就无法得以顺利完成这次毕业设计,在这里,我再次向他们表 示发自内心的谢意! 61 石家庄铁道学院毕业设计 附录A: 英文资料翻译 英文原文 附录B: 软件使用 说明书 房屋状态说明书下载罗氏说明书下载焊机说明书下载罗氏说明书下载GGD说明书下载 使用说明书 欢迎使用石铁院CA认证中心软件(以下简称“CA中心”);在使用之前,请认真阅读本手册,并按照使用说明书进行操作。 知识产权: .“石铁院CA认证中心软件”由石家庄铁道学院CA开发小组设计、编制及出品。 . 石家庄铁道学院CA开发小组拥有“石铁院CA认证中心软件”独立的完整的知识产权。 免责条款: .本小组尽力确保说明书中的内容和信息完整,但对手册中的错误不承担 责任。 .本说明书及书中所提及的软件如有更新,恕不另行通知。 声 明: .未经石家庄铁道学院CA开发小组书面许可,任何人不得以任何方式将本 说明书复制、抄袭或翻译成另外一种语言。 对于使用中出现的问题,请直接与石家庄铁道学院CA开发小组联系! 石铁院CA认证中心软件 石铁院CA认证中心是一套具有证书申请,证书颁发,证书吊销以及证书 统计查询和输出统计报表等多种功能的数字证书管理软件,主要功能有: 证书申请:由注册用户在客户端填写相关的信息,并申请颁发证书; 证书颁发:由CA中心的管理员对用户证书的信息进行审核并对符合要求 的证书进行颁发; 证书吊销:由CA中心的管理员对证书时间过长的或者无效的证书进行吊 销操作; 证书查询统计:用户按照自己的权限进行查询操作,管理员可以进行统计 操作; 62 石家庄铁道学院毕业设计 统计报表的输出:将各种统计信息按照一定的格式进行输出。 1 软件安装 本软件属于绿色软件,直接复制可执行文件和DreamWaver文件到自己电脑的硬盘上面,双击即可执行。 2 运行软件 首先打开客户端界面: 客户端界面图 在这里你可以进行用户注册,证书在线申请等操作,并可以了解有关CA的知识性简介。如果你是CA管理员,那么你可以进入服务器端界面: 63 石家庄铁道学院毕业设计 在这里,你可以进行颁发证书,吊销证书等操作。只要你在客户区域选定需要 操作的证书,然后点击相应的按钮即可进行实际操作,使用非常简单。 如果你想使用查询统计和统计报表功能,你可以进入CA查询统计子系统的界面,如图: 在这里你可以进行查询统计操作并且区分了用户权限,管理员还可以进行统计 报表的输出。 经过紧张的开发工作和同组人员的大力支持以及郑老师的帮助,系统已经 初具规模。系统已经能够完成办法证书,密钥管理,吊销列表等基本功能,而 且还能够实现查询,统计和统计报表的输出,基本具备了一个小型CA认证中 64 石家庄铁道学院毕业设计 心的功能。我把自己的模块进行了测试,对照数据库中的信息进行统计查询操 作都能够正确完成所需要求,并且系统对一些人为的疏忽也能够做出适当的提 醒。服务器端界面大方,美观。在测试过程中没有出现错误情况,系统基本能 够达到我们预期的目的。而且总体来说,在使用过程中感到比较易用,具有较 好的人机交互性。 1 绪论 ...................................................................................................................................... 1 1.1 问题的提出 ....................................................................................................................... 1 1.2 国内外研究现状 .............................................................................................................. 2 1.3 课题研究的背景及意义 .................................................................................................. 3 1.4 本文的组织 ....................................................................................................................... 4 2 系统平台模式及开发工具 ................................................................................................. 6 2.1 系统平台模式................................................................................................................... 6 2.1.1 客户机/服务器(C/S)模式 ................................................................................ 6 2.1.2 Web浏览器/服务器(B/S)模式 ...................................................................... 6 2.2 开发工具介绍 ............................................................................................................... 7 2.2.1 Dreamweaver介绍 ............................................................................................... 7 2.2.2 VC++介绍............................................................................................................... 7 2.2.3 Access 2000介绍 ............................................................................................... 8 65 石家庄铁道学院毕业设计 3 PKI技术的研究 ................................................................................................................. 10 3.1 密码学基础 .................................................................................................................. 10 3.2 PKI组件及功能 .......................................................................................................... 10 3.2.1 PKI组件介绍 ..................................................................................................... 10 3.2.2 现有的PKI标准 .................................................................................................. 11 3.3 系统的信任模型 .......................................................................................................... 12 3.4 数字证书 ...................................................................................................................... 12 3.5 系统的标准化 ............................................................................................................. 12 4 需求分析 ............................................................................................................................ 14 4.1 功能需求 ...................................................................................................................... 14 4.2 结构化开发方法 .......................................................................................................... 14 4.3 系统的建模 .................................................................................................................. 15 4.3.1 数据流图 ............................................................................................................... 15 4.3.2 数据词典 ............................................................................................................... 18 4.3.3 模块功能分析图与使用权限 ............................................................................. 19 4.4 运行环境 ..................................................................................................................... 19 4.4.1 软件环境 ............................................................................................................... 20 4.4.2 网络系统硬件资源 .............................................................................................. 20 5 SJZRI.CA系统设计 .......................................................................................................... 22 5.1 CA的体系结构 ............................................................................................................ 22 5.2 各模块功能描述 ......................................................................................................... 22 5.2.1 证书申请和颁发模块(客户端的设计)........................................................... 22 5.2.2 证书制作和管理模块(服务器端的设计) ...................................................... 24 5.2.3 数据库模块 ........................................................................................................ 24 6 详细设计 ............................................................................................................................ 26 6.1 界面设计 ...................................................................................................................... 26 6.2 客户端证书请求和下载模块 ..................................................................................... 26 6.2.1 模块技术支持 ...................................................................................................... 26 6.2.2 注册功能............................................................................................................. 27 6.2.3 根证书下载 ........................................................................................................ 28 6.2.4 证书申请功能 ...................................................................................................... 30 66 石家庄铁道学院毕业设计 6.2.5 证书下载功能 .................................................................................................... 32 6.2.6 吊销列表查询下载功能.................................................................................... 34 6.2.7 留言板功能 ........................................................................................................ 35 6.3 服务器端证书制作和管理模块 ................................................................................ 38 6.3.1 模块技术支持 .................................................................................................... 39 6.3.2 个人证书的制作 ................................................................................................ 39 6.3.3 拒绝证书申请功能 ............................................................................................ 42 6.3.4 吊销证书功能 .................................................................................................... 42 6.3.5 吊销列表的制作 ................................................................................................ 43 6.3.6 根证书的制作 .................................................................................................... 45 6.4 数据库模块 ................................................................................................................. 49 6.4.1 数据库的连接 .................................................................................................... 49 6.4.2 表的构建............................................................................................................. 50 7 创新点 ................................................................................................................................ 53 8 测试分析 ............................................................................................................................ 55 8.1 系统的配置 ................................................................................................................. 55 8.2 系统测试 ..................................................................................................................... 55 9 结束语 ................................................................................................................................ 58 附录C:软件使用说明书 ............................................................. 60 67