基本思路:
1、在XP、Windows 2003的IE上,通过XEnroll.dll控件来完成根数字证书的自动安装。
2、在Vista,Windows 2008,Windows 7 的IE上,需要使用CertEnroll.dll来自动完成根数字证书的自动安装。
3、XEnroll.InstallPKCS7只适用于自动安装根证书。XEnroll.acceptPKCS7 用于安装用户数字证书,但需要配合CSR(Certificate signing request)才能够使用。要实现自动安装用户证书:
在IE中:需要配合Enroll.createPKCS10CSR来生成CSR(Certificate signing request)
在Firefox中:需要配合使用html的keygen标签来生成CSR
4、如果只需要能够下载证书并安装,而不要在IE浏览器中完成证书注销、证书申请等功能,可以采用下载证书文件的方式,MIME Type可以采用
application/x-pkcs12、application/pkcs-12
几个与PKI证书相关的MIME Type:
application/x-x509-ca-cert、application/x-x509-user-cert、application/pkcs10、application/x-pkcs10、application/pkcs-12、
application/x-pkcs12、application/x-pkcs7-signature、application/pkcs7-mime、application/x-pkcs7-mime、
application/pkcs7-mime、application/x-pkcs7-mime、application/x-pkcs7-certreqresp、application/pkcs7-signature
测试代码:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page import="java.lang.*,java.io.*" %> <html> <head> <title>IE中自动安装数字证书测试</title> </head> <body> IE中使用XEnroll.InstallPKCS7自动安装根数字证书<br/>
备注:这里测试的根证书采用Base64编码 X.509格式(CER)<br/> <% StringBuffer server_cert =new StringBuffer(); try { String realPath = this.getClass().getClassLoader().getResource("liangchuan.cer").getPath(); File file = new File(realPath); if (!file.exists()) { out.println("<HTML><BODY><P>"); out.println("<h2>根证书文件不存在</h2> <br/>"); out.println("</P></BODY></HTML>"); out.flush(); out.close(); }else{ BufferedReader bf=new BufferedReader(new FileReader(file)); String line=null; while((line=bf.readLine())!=null) server_cert.append(line); bf.close(); } }catch(Exception e){ out.println("<HTML><BODY><P>"); out.println("<h2>读取证书文件出错</h2> <br/>"); out.println(e.toString()); out.println("</P></BODY></HTML>"); out.flush(); out.close(); } String Agent = request.getHeader("User-Agent"); StringTokenizer st = new StringTokenizer(Agent,";"); st.nextToken(); String userBrowser = st.nextToken(); String userOS = st.nextToken(); out.println("你的操作系统为:"); out.println(userOS); String activexLib="XEnroll"; //检查是否是Windows Vista,Windows 2008,Windows 7,在Vista,Windows 2008,Windows 7上,需要使用 CertEnroll.dll //Windows 2008 Server, IE7 User-Agent header: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2;... //Windows Vista, IE7 User-Agent header: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;... //Windows 7,IE8 User-Agent header: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;... if(userOS.equals("Windows NT 6.0") || userOS.equals("Windows NT 6.1")|| userOS.equals("Windows NT 5.2")) activexLib="CertEnroll"; String sPKCS7=server_cert.toString(); %> <% if(activexLib.equals("XEnroll")) { %> <object id="XEnroll" classid="clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1" codebase="xenroll.dll"></object> <SCRIPT language="VBSCRIPT"> ON ERROR resume next sPKCS7 = "<%= sPKCS7 %>" //XEnroll.InstallPKCS7用于安装根证书。 XEnroll.InstallPKCS7(sPKCS7) if err.Number <> 0 then if err.number = -2146885628 then MsgBox "Keyset does not exist" else MsgBox "证书下载时出错,错误号="&err.description end if else MsgBox "证书已成功装入" end if </script> <% } else {%> //方法来源: //http://blogs.msdn.com/alejacma/archive/2009/01/28/how-to-create-a-certificate-request-with-certenroll-javascript.aspx //Vista下由于暂时没有测试环境,方法尚待验证 <object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09"></object> <script language="javascript"> function InstallCert() { document.write("<br>Installing certificate..."); try { // Variables var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment") var sPKCS7 = "<%= sPKCS7 %>" objEnroll.Initialize(1); // ContextUser objEnroll.InstallResponse(0, sPKCS7, 6, ""); // AllowNone = 0, XCN_CRYPT_STRING_BASE64_ANY = 6 } catch (ex) { document.write("<br>" + ex.description); return false; } return true; } InstallCert(); </script> <% } %>
<% /* out.println("用下载方式下载p12格式的文件下载后安装"); ClassLoader cl = this.getClass().getClassLoader(); try { InputStream is = cl.getResourceAsStream("liangchuan.p12"); //response.setContentType("application/x-x509-ca-cert"); response.setContentType("application/x-pkcs12"); response.addHeader("Content-Disposition", "attachment; filename=liangchuan.p12"); OutputStream os = response.getOutputStream(); //InputStream is = new FileInputStream(fileName); while (is.available() > 0) { char c = (char) is.read(); os.write(c); } os.flush(); is.close(); } catch (Exception e) { out.println("<HTML><BODY><P>"); out.println("<h2>下载证书文件出错</h2> <br/>"); out.println(e.toString()); out.println("</P></BODY></HTML>"); out.flush(); out.close(); } */ %> </body> </html>
相关推荐
总结来说,Java在IE中下载并自动安装根证书涉及到证书管理、系统API调用、安全策略等多个方面。正确理解和操作这些知识点,对于构建安全的网络环境至关重要。在实际应用中,应始终确保遵循最佳安全实践,并充分测试...
在某些情况下,如微软操作系统,即使用户删除了预先安装的根证书,在访问相关网站时系统也会自动恢复这些证书的信任状态。 #### 证书吊销列表(CRL) X.509标准还包括了一个证书吊销列表(CRL)实施标准,这对于...
综上所述,安装"网上出口核销报审系统"不仅需要满足特定的硬件和软件条件,还需要正确执行每一步安装过程,并确保数字证书的安装无误,这样才能保证系统在财务管理中安全、高效地运行。在日常维护中,定期检查更新和...
4. 默认情况下,数字证书会被安装到注册表中,但某些802.1x客户端可能不信任注册表中的证书,此时可能需要重新下载证书。 5. 完成安装后,可以在IE浏览器的"证书"设置中确认"SJTU.EDU.CN CA Root Certificate"证书已...
##### 步骤一:安装上海交通大学网络信息中心数字根证书 1. **下载证书**: - 访问提供的链接下载上海交通大学网络信息中心数字根证书。 - 下载完成后,会出现一个对话框,选择[打开]。 - 出现的新对话框中,...
对于有高安全需求的用户,可通过CAcert保证计划(Assurance Programme)获得更长的证书有效期、在证书中包含个人信息等额外权益。 **WebofTrust** WebofTrust是CAcert的一项独特功能,要求参与者面对面进行身份...
网站CA认证登录是一种增强安全性的方法,它通过数字证书来验证用户的身份,从而提高系统的安全性。本文将详细介绍如何在IIS上配置eToken实现网站的CA认证登录。 #### 二、关键技术概念 1. **IIS (Internet ...
CAu-key,全称为Certification Authority User Key,是一种用于身份认证的安全设备,通常是一个物理USB设备,内含数字证书,用于保障网络通信的安全。湖南CA(湖南省数字认证服务中心)提供的统一U-KEY客户端是为了...
数字证书是用于在网络通信中验证一方的身份的一种电子文档,它由权威机构(CA)签发,确保了公钥所有者的身份与证书中记录的信息相匹配。 **步骤**: 1. **安装证书服务器**:在服务器上安装证书服务,例如在...
**E-CERT CONTROL MANAGER**是一款专门用于管理智能卡及其数字证书的应用程序。它为用户提供了对智能卡进行安全管理和使用的工具,使得个人能够有效地保护自己的数字身份。本指南将详细介绍E-CERT CONTROL MANAGER的...
四、在Vista系统中安装IIS7.0相对于早先的版本,IIS 7.0 带来了许多引人注目的新特色新功能,比如基于 Microsoft .NET Framework 的全局配置文件,可简单地通过文本编辑器或 Microsoft Visual Studio 编辑;...
2-9验证数字证书漫游08:16 2-10创建保存的查询02:42 2-11使用CSVDE批量导入用户05:52 2-12使用CSVDE导出域用户04:13 2-13使用CSVDE导出域用户04:13 2-14使用CSVDE导出域用户04:13 2-15查看域中内置的组02:36 2-16域...
注意:根目录有空数据库,替换asaidata文件夹中的数据库即可删除搜索调试中的数据,替换后,需要从后台添加12+的产品,及其他信息方能完美显示前台页面。 ★★★★★★★★★★ 二、系统的优势 1、专业美工操刀,...