`
liulanghan110
  • 浏览: 1072602 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

使用CA签发的服务器证书搭建Tomcat双向SSL认证服务(转)

    博客分类:
  • JAVA
阅读更多

作者:junsan
QQ:334620162
发布网址:http://www.javastar.org/?p=120

 

这周一个项目上线,使用了SSL双向验证的方式保护WebService接口,原本自己使用keytool签发的服务器和客户端证书在开发和测试的时候都是正常的,但是,在上线后,通过公司的CA平台签发出来的正式证书,却始终无法通过java客户端正常链接。

 

后来通过网上的一个InstallCert.java的文件生成本地可信任证书库,倒是可以连接了,但是总觉得不对劲,后来仔细检查了一下,原来自己的操作步骤中漏了一步。

 

为了备忘,也防止自己以后再犯类似的错误,记录下来以备参考,同时也提供给需要的朋友,省的走弯路。

本文使用java的jdk自带的keytool为例说明。

 

第一部分,先说证书的申请。

 

这步是要到正规的CA公司申请正式的设备证书必须走的步骤。

 

1、先生成证书的密钥对

 

打开命令行,切换到某个自己新建的目录下,执行如下命令

keytool -genkey -keyalg RSA -keysize 1024 -dname “CN=www.javastar.org,OU=翊天阁,O=翊天阁,L=南京市,ST=江苏省,C=CN” -alias server -keypass 123456 -keystore server.jks -storepass 123456 -validity 365

这里说明一下几个重要的地方,CN=www.javastar.org,这里的www.javastar.org 一定要换成你实际要部署的站点的域名,如果是在内网,就要用服务器的hostname,一定不可以用IP,否则,是无法建立SSL链接的。

OU=翊天阁,O=翊天阁,这里可以替换成你自己的组织名称,或者公司名称。

-validity 365这里声明证书有效期为1年。

其他的参数自己可以参考keytool的使用帮助或相关文档。

好了,成功执行上面的命令后,我们在当前命令行所在目录得到server.jks文件,这个就是包含密钥对的基本证书信息库文件。

 

2、导出证书请求文件

 

keytool -certreq -alias server -sigalg “SHA1withRSA” -file server.pem -keypass 123456 -keystore server.jks -storepass 123456

这里可以得到一个server.pem的文件。

 

3、向CA公司申请签发设备证书

 

将上一步得到的server.pem证书发送给相关的CA公司,CA公司会通过这个申请签发一张设备证书,最后我们会得到一个.cer的文件,比如server.cer。

同时,我们要取得该CA公司的证书链,比如会有CA_ROOT.cer和CA_CA.cer,第一张为CA公司的根证书,第二张为CA公司的签名证书。

 

4、将CA根证书导入服务器证书库

 

keytool -import -alias CA_ROOT -keystore server.jks -trustcacerts -storepass 123456 -file CA_ROOT.cer

 

5、将CA签名证书导入服务器证书库

 

keytool -import -alias CA_CA -keystore server.jks -trustcacerts -storepass 123456 -file CA_CA.cer

 

6、使用CA签发的证书回复我们自己生成的包含私钥的证书

 

keytool -import -alias server -keystore server.jks -trustcacerts -storepass 123456 -file server.cer

 

7、导出回复成功后的服务器证书

 

keytool -export -alias server -storepass 123456 -file javastar.org.cer -keystore server.jks

好了,到这里我们需要的设备证书已经ok了。

最后对我们实际有用的是两个文件:server.jks,是服务器证书库,存储了含有私钥的服务器证书,及其证书链,这个就是主要的设备证书了,是 放在服务器的SSL配置里面;还有一个是javastar.org.cer,这个是只包含服务器证书公钥的设备证书,是发给用户,让用户放入自己的可信任 库的。

 

第二部分,配置Tomcat的SSL双向链接

 

1、准备客户端证书

 

keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname “CN=Client,OU=javastar.org,L=nj,ST=js,C=cn” -storepass 123456 -keypass 123456 -validity 365

执行完毕,我们会得到一张p12的客户证书client.p12。

 

2、导出.cer格式的客户证书

 

keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

执行完毕得到client.cer证书。

 

3、将客户端证书导入服务器的可信任证书库

 

keytool -import -v -file client.cer -keystore servertrust.keystore -storepass 123456

 

执行完毕得到servertrust.keystore,这个是给tomcat服务器端用的。

 

4、将服务器证书导入客户端可信任证书库

 

keytool -import -v -file javastar.org.cer -keystore clienttrust.keystore -storepass 123456

 

执行完毕会得到clienttrust.keystore证书库,留着备用。同时,也可以同样的方法,把CA_ROOT.cer和CA_CA.cer导入。

 

5、在和tomcat的bin目录并行的目录下新建一个cert文件夹,把server.jks和servertrust.keystore文件拷贝进去。

 

6、找到tomcat的server.xml文件,找到如下的内容

 

  <!–
    <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
               maxThreads=”150″ scheme=”https” secure=”true”
               clientAuth=”false” sslProtocol=”TLS” />
    –>
   
    去掉注释,并修改为
   
    <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
               maxThreads=”500″ scheme=”https” secure=”true”
               clientAuth=”true” sslProtocol=”TLS”
               keystoreFile=”D:/apache-tomcat-6.0.20/cert/server.jks” keystorePass=”123456″
        truststoreFile=”D:/apache-tomcat-6.0.20/cert/servertrust.keystore” truststorePass=”123456″/>
 
 这里注意把D:/apache-tomcat-6.0.20/cert修改为你的tomcat实际的路径。
 
7、启动或者重启tomcat,在浏览器中导入client.p12的证书,然后,在地址栏输入https://www.javastar.org:8443 ,就会弹出证书选择框,选择证书后,就可以使用SSL协议访问tomcat服务器了。

 

第三部分,在程序中如何建立与服务器的SSL双向认证链接

 

其实这个就简单了,以java为例,比如我们现在要访问一个通过SSL双向认证保护的WebService接口,只需要在生成的客户端程序中开始部分加入

 

System.setProperty(“javax.net.ssl.keyStore”, “D:/client.p12″);
System.setProperty(“javax.net.ssl.keyStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12″);
System.setProperty(“javax.net.ssl.trustStore”, “D:/clienttrust.keystore”);
System.setProperty(“javax.net.ssl.trustStorePassword”, “123456″);
System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);

 

JVM会自动将证书提交给服务器验证,由于服务器证书也在我们的可信任库,也会自动信任服务器端的证书。

下面的代码可以在需要的时候清除以上的环境内容

 

System.clearProperty(“javax.net.ssl.keyStore”);
System.clearProperty(“javax.net.ssl.keyStorePassword”);
System.clearProperty(“javax.net.ssl.keyStoreType”);
System.clearProperty(“javax.net.ssl.trustStore”);
System.clearProperty(“javax.net.ssl.trustStorePassword”);
System.clearProperty(“javax.net.ssl.trustStoreType”);

 

有一点要提醒的就是,客户端连接的时候,需要把连接的url修改为https的,如以JAX-WS的客户端为例

 

URL url = new URL(“https://www.javastar.org:8443/WsPort.ws?wsdl”);// 这里就是实际发布的wsdl的地址
WsService hws = new WsService(url);//自动生成的类可能没有这个方法,你需要仿照写一个
Ws ws = hws.getUsvsPort();


自建的构造方法:


public WsService(URL wsdlLocation) {
 super(wsdlLocation, new QName(“http://webservice.javastar.org/ “,
   ”WsService”));
}

 

得到了对象的实例,其他的就跟我们普通操作java类一样了。

 

如果发现问题可以和我交流,QQ334620162,欢迎转载,请保留版权信息。

 

分享到:
评论

相关推荐

    通过tomcat实现SSL双向认证

    通过 Tomcat 实现 SSL 双向认证需要同时配置 Web 服务器证书和客户端证书,并在服务器和客户端之间正确安装根证书。配置 Tomcat 实现 SSL 双向认证可以提高数据传输的安全性,保护网络通信的安全。

    AndroidHttpClient访问Tomcat双向SSL验证服务器.pdf

    本文详细介绍了如何使用`AndroidHttpClient`访问`Tomcat`双向SSL验证服务器的过程,包括证书生成、Tomcat配置、客户端验证等多个方面。通过对这些步骤的详细解析,不仅解决了实际项目中的问题,也为读者提供了一个...

    基于Tomcat搭建SSL双向认证示例【100012422】

    本示例将深入探讨如何使用Tomcat搭建SSL(Secure Socket Layer)双向认证环境,以及通过Java原生类库SSLSocket进行编程,以及使用Apache的Httpclient库模拟安全的客户端请求。以下是对这些知识点的详细讲解。 首先...

    用tomcat和openSSL构建https双向认证

    这是我实战的笔记,全程直播。...4、通过CA签发证书 5、生成pem格式证书 6、生成pkcs12格式证书 二、tomcat实现双向认证 1、创建服务器信任的CA证书库 2、配置Tomcat支持HTTPS双向认证(服务器将认证客户端证书)

    tomcat android 双向ssl通信

    - **双向SSL认证**:不仅服务端需要认证,客户端也需要提供证书以进行身份验证。这是一种更为安全的通信方式。 - **证书(Certificate)**:是公钥和身份信息绑定的数据结构,由权威的证书颁发机构(CA)签发。 - **...

    Tomcat SSL 认证设置及证书自己生成

    标题"Tomcat SSL 认证设置及证书自己生成"涉及的核心知识点是Tomcat服务器的SSL安全套接层配置以及如何自签发CA(证书颁发机构)证书。SSL是Secure Socket Layer的缩写,是互联网上确保数据传输安全的一种协议。它...

    Tomcat6配置使用SSL双向认证

    在IT领域,特别是Web服务器管理与安全配置方面,Tomcat6的SSL(Secure Sockets Layer)双向认证配置是一项关键技能。SSL双向认证不仅能够保护数据传输的安全性,还能确保通信双方的身份验证,这对于金融、医疗等对...

    tomcat搭建ssl服务

    此外,SSL还提供了身份验证功能,服务器通过证书向浏览器证明其身份,有时甚至会请求客户端的证书进行双向认证。 ### 1. SSL简介 - **加密通信**:SSL通过加密技术确保数据在客户端和服务器之间传输时的隐私性,...

    私有CA搭建并应用于Tomcat、Springboot.docx

    在Tomcat服务器上创建一个信任库,用于存储CA的证书,以便服务器能识别由CA签发的证书。 4. **CA中心签名**: 将Tomcat服务器的CSR发送给CA中心,CA使用自己的私钥对CSR进行签名,生成服务器的证书。 5. **导入...

    Tomcat6和5.5配置使用SSL双向认证(使用openssl生成密钥)

    ### Tomcat6 和 5.5 配置使用 SSL 双向认证(使用 OpenSSL 生成密钥) 在本文中,我们将详细介绍如何通过 OpenSSL 工具为 Tomcat 服务器配置 SSL 双向认证的过程。SSL(Secure Sockets Layer)是用于加密互联网通信...

    利用tomcat服务器配置https双向认证、https单向认证-ssl、tls

    Tomcat作为流行的Java Servlet容器,提供了支持HTTPS协议的能力,这包括了单向认证(也称为服务器认证)和双向认证(也称为客户端认证)。这两种认证机制都是基于SSL(Secure Sockets Layer)和TLS(Transport Layer...

    tomcat 实现https 双向认证通信

    - 使用CA签发服务器证书:`openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt`。 ##### 4.2 生成客户端证书 - **生成客户端私钥**: - 执行命令`openssl ...

    tomcat 配置ssl 证书

    - 对于商业用途,可能需要购买一个由知名CA签发的证书。 2. **生成密钥对**: 使用OpenSSL工具生成一个CSR(Certificate Signing Request)文件和私钥。命令如下: ``` openssl req -new -newkey rsa:2048 -...

    tomcat6启用SSL_证书_tomcat6多ssl_Tomcat6;SSL;_

    5. **安装证书**:将CA签发的证书导入到你的密钥库中: ``` keytool -import -trustcacerts -file your_certificate.crt -alias tomcat -keystore keystore.jks ``` 6. **配置Tomcat**:在Tomcat的`conf/server...

    SSL配置手册-tomcat

    ### SSL配置手册-Tomcat:双向SSL认证及证书生成指南 #### 一、SSL与Tomcat简介 在深入了解如何在Tomcat服务器上配置SSL之前,我们先简要回顾一下SSL和Tomcat的基本概念。 - **SSL (Secure Sockets Layer)**:是...

    nginx、tomcat安装免费ssl安全证书配置

    SSL证书由权威的证书颁发机构(CA)签发,它包含了网站的公钥、组织信息等,用于验证网站的身份并建立安全连接。阿里云作为知名的云服务提供商,也提供了免费的SSL证书服务。 安装步骤如下: 1. **申请阿里云免费...

    Tomcat SSL解决方案

    标题“Tomcat SSL解决方案”指的是在Apache Tomcat服务器上配置SSL(Secure Sockets Layer)或其更新版本TLS...对于生产环境,强烈建议使用由权威CA签发的证书,而非自签名证书,因为后者可能会引发浏览器的警告。

    openSSL生成证书以及在tomcat下的配置

    生成CA证书后,我们可以使用CA证书签发服务器端证书。使用openSSL命令签发服务器端证书: `openssl ca -in server.csr -out server.crt` 这将生成一个名为`server.crt`的服务器端证书文件,该文件包含了服务器的...

    tomcat ssl单向/双向

    总结来说,"Tomcat SSL 单向/双向"涉及到网络通信的安全性,涵盖SSL证书的配置、服务器和客户端的认证,以及源码层面的理解。对于开发和运维人员,掌握这些知识对于构建安全的Web服务至关重要。

Global site tag (gtag.js) - Google Analytics