`
隐形的翅膀
  • 浏览: 497522 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OPEN SSL 自制数字证书

阅读更多
SSL 自制数字证书
配置支持SSL的Tomcat dchg2000(原作)
转自--http://openssl.cn/program_top_detail.asp?program_id=1&article_id=&topic_id=1272    
     关键字 SSL Tomcat Openssl keytool 
     
     一、配置环境
     1.1 Tomcat简介
     Tomcat是Apache Jakarta的子项目之一,作为一个优秀的开源web应用服务器,全面支持jsp1.2以及servlet2.3规范。因其技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的web应用服务器。
    
     1.2 SSL(Server Socket Layer)简介
     在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展,人们对信息安全的要求越来越高。因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(www.ietf.org)对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
    
     1.3 SSL工作原理
     SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https://ip:port/的方式来访问。
    
     当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
    
     用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
     服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
     客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。
     客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。
     如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
     如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。
     客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
     客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
     服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
     本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
     1.4 所需软件包
     Tomcat 4.0.2
     用途:Web Server。
     下载:http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/
     JSSE 1.0,2
     用途:用来产生Tocmcat使用的秘钥对(keystore)。
     下载: http://java.sun.com/products/jsse/
     Openssl 0.9.9.6
     用途:用来产生CA证书、签名并生成IE可导入的PKCS#12格式私钥。
     下载:http://www.openssl.org/
     二 配置步骤
     2.1 建立自己的CA证书
     1.在openssl的apps目录下建立自己的CA目录,例如:mageCA
    
     mkdir mageCA
    
     2.生成CA密钥
    
     openssl genrsa -out mageCA/ca-key.pem 1024
    
     genrsa [产生密钥命令] –out[密钥文件输出路径] 1024 [密钥位数]
    
     3.生成待签名的证书
    
     openssl req -new -out mageCA/ca-req.csr -key mageCA/ca-key.pem
    
     req[产生证书命令]-new[新生成]-out[证书文件输出路径]-key[私钥文件路径]
    
     4.用CA私钥自签名
    
     openssl x509 -req -in mageCA/ca-req.csr -out mageCA/ca-cert.pem -signkey mageCA/ca-key.pem -days 365
    
     x509[签发x509证书命令]-req[输入待签发证书]-in[输入待签发证书文件路径]-out[产生x509证书文件输出路径]-signkey[自签发密钥文件路径]-days[证书有效期]–CA[签发跟证书]-Cakey[根证书密钥文件] –Cacreateserial[创建序列号]
    
     [注] 将自动生成的ca-key.srl文件拷贝到创建的CA目录下.。
    
     2.2 配置Tomcat 4.X
     2.2.1 建立服务器证书
     [注] 在本文中用符号"%JDK_HOME%"来表示JDK的安装位置,用符号"%TCAT_HOME%" 表示Tomcat的安装位置。
    
     1. 建立工作目录
    
     在%JDK_HOME%的bin目录下建立自己的server目录,例如:server
    
     mkdir server
    
     2. 生成server密钥对
    
     %JDK_HOME%/bin/keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass changeit -storepass changeit -dname "cn=localhost, ou=department, o=company, l=Beijing, st=Beijing, c=CN" -keystore server/server_keystore
    
     -genkey[产生密钥对]-alias[密钥对别名]-validity[密钥有效期]-keyalg[密钥算法参数]-keysize[密钥位数]-keypass[密钥保护密码]-storepass[存储密码]-dname[别名相关附加信息]-keystore[密钥存储文件路径]
    
     [注] -alias后的tomcat_server是密钥对的名字可替换为自己需要的名字;
    
     -keypass与-storepass后的changeit为保护密码必须6位,将其替换为你的密码即可;
    
     -dname为包含的server信息。其中cn是服务器的名字一定要与WEB服务器中设置的一样。
    
     3. 生成待签名证书
    
     %JDK_HOME%/bin/keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server/server.csr -keypass changeit -keystore server/server_keystore -storepass changeit
    
     -certreq[产生待签名证书]-alias[证书别名]-sigalg[证书算法参数]-file [产生文件输出路径]-keypass[密钥保护密码]-keystore[存储文件路径]-storepass[存储密码]
    
     4. 用CA私钥签名
    
     openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA mageCA/ca-cert.pem -CAkey mageCA/ca-key.pem -days 365
    
     [注] 先将生成的server.csr文件ftp到linux上openssl的目录下的server子目录中,ftp的传输模式应设为bin模式,以下同。
    
     2.2.2 将CA根证书和服务器证书导入Tomcat
     1. 导入CA根证书
    
     将CA根证书(ca-cert.pem)ftp到Java工作目录下的ca子目录中
    
     %JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias my_ca_root -file ca/ca-cert.pem -keystore %JDK_HOME%/jre/lib/security/cacerts
    
     -import[导入命令]-v –trustcacerts[导入信任证书] –storepass[存储密码]-alias[证书别名]-file[证书文件路径]-keystore[导入文件路径]
    
     [注] 此处的-storepass为默认的“changeit”。-alias为CA根证书的别名。
    
     2. 导入服务器证书
    
     将服务器证书(server-cert.pem)ftp到Java工作目录下的server子目录中。
    
     %JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore
    
     [注] 此时的-storepass为生成证书时输入密码。-alias为服务器证书的别名。
    
     3. 查看证书
    
     查看CA证书
    
     keytool -list -keystore %JDK_HOME%/jre/lib/security/cacerts
    
     查看服务器证书
    
     keytool -list -keystore server/server_keystore
    
     2.2.3 修改Tomcat的配置文件
     修改conf目录下server.xml文件找到以下内容去掉其注释并修改。
    
     <!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
    
     <Connector className="org.apache.catalina.connector.http.HttpConnector"
    
     port="8443" minProcessors="5" maxProcessors="75"
    
     enableLookups="false"
    
     acceptCount="10" debug="0" scheme="https" secure="true">
    
     <Factory className="org.apache.catalina.net.SSLServerSocketFactory"
    
     clientAuth="true" protocol="TLS"
    
     keystoreFile="c:/jakarta-tomcat-4.0-b1/conf/server_keystore" keystorePass="780608"
    
     />
    
     </Connector>
    
     然后把文件server/ server_keystore复制到目录%TCAT_HOME%\conf\下
    
     2.3 配置IE客户端
     2.3.1 建立Client证书
     1. openssl的apps目录下建立自己的Client目录,例如:client
    
     2. 生成Client密钥对
    
     openssl genrsa -out client/ client –key.pem 1024
    
     3. 生成待签名的证书
    
     openssl req -new -out client/ client-req.csr -key client/ client-key.pem
    
     4. 用CA私钥签名
    
     openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey c lient/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365
    
     5. 生成Client端可以导入的个人证书
    
     openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
    
     pkcs12[生成PKS12格式证书命令]-export[导出文件]-clerts[仅导出client证书]-in[输入的client证书文件路径]-inkey[client证书密钥文件路径]-out[导出PKS12格式文件路径]
    
     2.3.2 将CA证书与client证书导入IE
     1. 导入CA根证书
    
     将已经ftp到Java工作目录下ca子目录中的ca-cert.pem改名为ca-cert.cer;
    
     在client端的IE中使用<工具>,< Internet选项>,<内容>,<证书>,<导入>,把我们生成的CA根证书导入,使其成为用户信任的CA。
    
     2. 导入client证书
    
     将client证书(client.p12)ftp到Client端,把client.p12导入到client端的IE中作为client证书,导入过程同上
    
     三 用IE浏览器使用SSL协议访问Tomcat
     1. 执行%TCAT_HOME%/bin/startup.bat启动Tomcat 4.x;
    
     2. 在IE浏览器的地址栏中输入https://localhost:8443,如果前面的操作都正确,应该可以看到Tomcat的欢迎页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。

分享到:
评论

相关推荐

    url.openStream报错javax.net.ssl.SSLHandshakeException解决(忽略ssl证书方式)

    访问带https请求忽略ssl证书,避免url.openStream报错javax.net.ssl.SSLHandshakeException url = new URL(imageUrl); if("https".equalsIgnoreCase(url.getProtocol())){ SslUtils.ignoreSsl(); } //不添加...

    OPEN SSL学习资料汇总

    - **数字证书**:用于验证网络服务提供者的身份,由证书颁发机构(CA)签署并包含公钥信息。 2. **OpenSSL 编程** - `openssl` 命令行工具:OpenSSL 包含一组命令行工具,可以用来生成证书、进行加密解密操作、...

    SSL双向认证证书制作过程流程

    SSL双向认证证书制作过程流程

    Open SSL 常用函数

    通过这些函数,开发者可以实现包括但不限于加密通信、数字签名、证书验证、密钥管理等安全功能。OpenSSL库的灵活性和广泛支持使其成为开发安全软件的重要工具。在使用时,需要注意更新到最新版本以避免已知的安全...

    open ssl demo example (证书自带)

    6. **SSL/TLS配置**:示例可能会展示如何在Web服务器(如Apache或Nginx)的配置文件中设置SSL/TLS,包括指定证书和私钥文件路径,以及设置加密套件等。 7. **加密套件**:OpenSSL支持多种加密算法和哈希函数,选择...

    open ssl动态库32位跟64位

    它包含了各种加密算法、常用的密钥和证书处理功能,以及SSL/TLS协议的实现。在Windows环境中,OpenSSL有32位和64位两种版本,以适应不同体系架构的应用程序。 标题"OpenSSL动态库32位跟64位"主要涉及的是在Windows...

    OPEN SSL 的 RSA 使用例子

    **OPEN SSL 中 RSA 加密算法详解** RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛...通过理解并熟练运用这些知识,开发者可以在 OPEN SSL 中实现 RSA 加密解密和数字签名功能,确保数据的安全传输和存储。

    open SSL 1.1.1稳定版本

    open SSL 1.1.1稳定版本

    Python数字证书分析

    Python提供了多种库来处理和分析数字证书,其中最常用的是`ssl`和`pyOpenSSL`库。`ssl`库是Python标准库的一部分,主要用于SSL/TLS协议的实现,而`pyOpenSSL`则提供了更底层的接口,可以进行更复杂的证书操作。 ...

    Open SSl 1.1

    已经编译好的OPENSSL 1.1最新官方库,WIN32平台使用,可直接添加的VC2013使用,添加方式加入头文件和库文件:#include #include ...本人正在使用的VC SSL版本,可以正常连接到加密传输TLS1.2的服务器上。

    apatch-no-and-open-ssl

    标题中的"apatch-no-and-open-ssl"似乎指的是一个针对Apache HTTP服务器的补丁程序,它包含了两个版本:普通的Apache HTTP服务器(apatch)和带有OpenSSL支持的版本。OpenSSL是一个开源的库,主要用于实现安全套接层...

    数字证书C#

    在实际应用中,数字证书常用于HTTPS通信,SSL/TLS协议就是依赖数字证书进行安全传输。C#中的HttpClient类提供了处理HTTPS请求的方法,它会自动处理服务器的数字证书验证。但如果你需要自定义验证规则,可以设置...

    open ssl 0.9.6.rar

    它包含了各种加密算法、常用的密钥和证书操作,以及用于实现SSL/TLS协议的函数。在您的场景中,您提到的是OpenSSL的一个较旧版本——0.9.6,这在DELPHI2006环境下运行时出现了问题,需要特定版本的库来解决加载失败...

    java信任SSL证书的工具类

    java信任SSL证书的工具类 忽略HTTPS请求的SSL证书,必须在openConnection之前调用

    j2me程序sslsocket联网编程(客户端,服务器),wtk导入数字证书

    在本文中,我们将深入探讨Java ME (J2ME) 平台上的SSLSocket联网编程,以及如何使用WTK(Java Wireless Toolkit)导入数字证书来确保客户端和服务器间的安全信息传输。J2ME是Java的一个子集,专为移动设备和嵌入式...

    open ssl x86

    OpenSSL 是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,同时也包含各种加密算法、常用的密钥和证书处理工具。在本文中,我们将深入探讨OpenSSL在x86架构下的应用,特别是在Visual Studio 11(即...

    openssl.zip open ssl zip编译好的文件

    当你提到“openssl.zip open ssl zip编译好的文件”,这通常指的是一个包含了预编译版 OpenSSL 库的压缩文件。这个压缩包可能是为了方便用户在不同的操作系统或环境中快速使用 OpenSSL 而准备的。 在本文中,我们将...

    openssl.7z open ssl 7z 压缩包 源码

    5. 应用编程接口(API):OpenSSL 提供了丰富的C语言API,使得开发者可以在自己的应用中轻松集成SSL/TLS支持,进行加密解密、数字签名等操作。 源码分析与学习: 1. 源码结构:OpenSSL 源码组织清晰,包括多个子...

    linux系统openssl 实现ssl自签证书

    Linux系统,如Ubuntu、CentOS、openEuler等,提供了强大的命令行工具openssl来生成这样的自签证书。 首先,生成CA根证书是整个过程的基础。CA根证书是用于签署其他证书的可信源头。在Linux环境下,可以通过shell脚...

    ssl blood 心脏出血

    **原理:** Open SSL的心跳功能是为了保持TCP连接活跃而设计的一种机制,但Heartbleed漏洞的存在使得攻击者能够发送异常的心跳包,从而读取服务器内存中的数据,包括但不限于私钥、用户口令、密码、电子邮件信息、...

Global site tag (gtag.js) - Google Analytics