一、SSL(Server Socket Layer)简介
Netscape公司提出的SSL协议,旨在达到
在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(www.ietf.org
)对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
二、工作原理
SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https://ip:port/
的方式来访问。
当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
1. 用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
2. 服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
3. 客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。
4. 客户端浏览器为本次会话生成pre-master secret,并将其用服务器公钥加密后发送给服务器。
5. 如果服务器要求鉴别客户身份(双向认证),客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
6. 如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master secret,并用它通过某些算法生成本次会话的master secret。
7. 客户端与服务器均使用此master secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
8. 客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
9. 服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
10. 本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。
三、服务器端证书
命令行打开%java_home%/bin,keytool
是JDK提供的证书生成工具,所有参数的用法参见keytool –help
1、生成服务端
证书私钥
dos状态下执行命令:
keytool ‐genkey ‐v ‐alias
jbossserver
‐keyalg RSA ‐keystore jbossserver.jks ‐dname "CN=127.0.0.1,OU=michael,O=michael,L=SZ,ST=GD,C=CN" ‐validity 3650 ‐storepass ffffff ‐keypass ffffff
说明:
keytool
是JDK提供的证书生成工具,所有参数的用法参见keytool –help
-genkey
创建新证书
-v
详细信息
-alias
jbossserver
以”jbossserver
”作为该证书的别名。这里可以根据需要修改
-keyalg
RSA 指定算法
-keystore
jbossserver
.jks 保存在%java_home%/bin目录下
-dname
"CN=127.0.0.1,OU=michael,O=michael,L=SZ,ST=GD,C=CN
" 证书发行者身份,这里的CN要与发布后的访问域名一致。但由于我们是自己发行的证书,如果在浏览器访问,仍然会有警告提示
-validity
3650证书有效期,单位为天
-storepass
ffffff
证书的存取密码
-keypass
ffffff
证书的私钥
2、 生成证书签名请求
keytool
-certreq -alias tomcat_server -sigalg MD5withRSA -file
tomcat_server.csr -keypass 123456 -storepass 123456 -keystore
server_keystore
导出服务端证书
执行命令:
keytool -export -alias tomcat -keystore D:/SSL/server/tomcat.keystore -storepass pdepde -rfc -file D:/SSL/server/tomcat.cer
说明:
把服务端证书导出。这里提供的密码也是服务端证书的密码。
1.2 生成客户端证书
执行命令:
keytool ‐genkey ‐v ‐alias client ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname "CN=client,OU=pde,O=pde,L=bj,ST=bj,C=CN" ‐validity 3650 ‐storepass client ‐keypass client
说明:
参数说明同上。这里的-dname
证书发行者身份可以和前面不同
1.3 导出客户端证书
执行命令:
keytool ‐export ‐alias client ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client ‐rfc ‐file D:/SSL/client/client.cer
说明:
-export
执行导出
-file
导出文件的文件路径
1.4 把客户端证书加入服务端证书信任列表
执行命令:
keytool ‐import ‐alias client ‐v ‐file D:/SSL/client/client.cer ‐keystore D:/SSL/server/tomcat.keystore ‐storepass pdepde
说明:
参数说明同前。这里提供的密码是服务端
证书的密码。
1.5 导出服务端证书
执行命令:
keytool -export -alias tomcat -keystore D:/SSL/server/tomcat.keystore -storepass pdepde -rfc -file D:/SSL/server/tomcat.cer
说明:
把服务端证书导出。这里提供的密码也是服务端证书的密码。
1.6 生成客户端信任列表
执行命令:
keytool -import -file D:/SSL/server/tomcat.cer -storepass pdepde -keystore D:/SSL/client/client.truststore -alias tomcat –noprompt
说明:
让客户端信任服务端证书
2. 配置服务端参数
2.1 配置Tomcat 目录下的/conf/server.xml
-
<
Connector
port
=
"8443"
protocol
=
"HTTP/1.1"
SSLEnabled
=
"true"
-
maxThreads
=
"150"
scheme
=
"https"
secure
=
"true"
clientAuth
=
"true"
-
sslProtocol
=
"TLS"
keystoreFile
=
"D:/SSL/server/tomcat.keystore"
-
keystorePass
=
"pdepde"
truststoreFile
=
"D:/SSL/server/tomcat.keystore"
-
truststorePass
=
"pdepde"
/>
这里的参数clientAuth
决定了是否执行强制客户端证书验证,true-只允许持有证书的客户端执行https连接
2.2 配置服务端项目web.xml
增加:
-
<
security-constraint
>
-
<
web-resource-collection
>
-
<
web-resource-name
>
services
</
web-resource-name
>
-
<
url-pattern
>
/services/*
</
url-pattern
>
-
</
web-resource-collection
>
-
<
user-data-constraint
>
-
<
transport-guarantee
>
CONFIDENTIAL
</
transport-guarantee
>
-
</
user-data-constraint
>
-
</
security-constraint
>
这里的“<url-pattern>/services/*</url-pattern>
”指定了必须采用https的链接,当访问这些路径时,http协议的访问将被转发至https协议。这里需要根据服务端项目中web service的访问地址来配置
3. 修改客户端代码
在执行访问之前,增加:
-
System.setProperty(
"javax.net.ssl.trustStore"
,
"D:/SSL/client/client.truststore"
);
-
System.setProperty("javax.net.ssl.trustStorePassword"
,
"pdepde"
);
-
System.setProperty("javax.net.ssl.keyStoreType"
,
"PKCS12"
) ;
-
System.setProperty("javax.net.ssl.keyStore"
,
"D:/SSL/client/client.p12"
) ;
-
System.setProperty("javax.net.ssl.keyStorePassword"
,
"client"
) ;
-
-
String endPoint="https://127.0.0.1:8443/easbCut/services/ApplyFormService"
;
-
...
通过设置参数来指定客户端连接时所使用的客户端证书,这里还可以采用修改JVM启动参数的的方式来执行,但处于不影响其他功能的考虑,这里采用System.setProperty的方式来设置这些参数,在使用结束后,可以还原这些参数配置。
做为客户端的开发者,可以把拿到的证书文件后,只执行步骤3。
====================================
JDK中keytool常用命令
-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息 例如: "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
-list 显示密钥库中的证书信息 keytool -list -v -keystore sage -storepass ....
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias caroot -file caroot.crt
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias sage -keystore sage
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
-import 将已签名数字证书导入密钥库 keytool -import -alias sage -keystore sagely -file sagely.crt
导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。
1.证书的显示
-list
[-v | -rfc] [-alias <alias>]
[-keystore <keystore>] [-storepass <storepass>]
[-storetype <storetype>] [-provider <provider_class_name>]
例如:keytool -list -v -alias RapaServer -keystore cacerts -storepass 12345678
keytool -list -v -keystore d2aapplet.keystore -storepass 12345678 -storetype IAIKKeystore
2.将证书导出到证书文件
例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer
将把证书库 monitor.keystore 中的别名为 monitor 的证书导出到 monitor.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。
keytool -export -keystore d2aApplet.keystore -alias RapaServer -file Rapa.cert -storetype IAIKKeystore
3.将keystore导入证书中
这里向Java默认的证书 cacerts导入Rapa.cert
keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert -keystore cacerts
4.证书条目的删除
keytool的命令行参数 -delete 可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,这条命令将 d2aApplet.keystore 中的 RapaServer 这一条证书删除了。
5.证书条目口令的修改
使用 -keypasswd 参数,如:keytool -keypasswd -alias RapaServer -keystore d2aApplet.keystore,可以以交互的方式修改 d2aApplet.keystore证书库中的条目为 RapaServer 的证书。
Keytool -keypasswd -alias RapaServer -keypass 654321 -new 123456 -storepass 888888 -keystore d2aApplet.keystore这一行命令以非交互式的方式修改库中别名为 RapaServer 的证书的密码为新密码 654321,行中的 123456 是指该条证书的原密码, 888888 是指证书库的密码。
分享到:
相关推荐
js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例js+webservice 样例
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
Java与Web服务(Webservice)相结合,通常用于构建可跨平台、跨语言的分布式系统。在本项目中,我们利用MyEclipse作为集成开发环境,它提供了强大的Java Web应用程序开发功能,包括对Webservice的支持。SQLServer是...
1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科、人工智能、大数据、数学、电子信息等)正在做课程设计、期末大作业和毕设...C++课设:基于QT+webservice的天气查询系统.
在IT行业中,安全性和认证是任何网络服务的核心要素。针对Web Service接口的认证,特别是当它们需要处理敏感数据或执行关键操作时,至关重要。本文将深入探讨如何在C#环境中为Web Service接口添加SoapHeader认证,这...
【标题】"XAMPP+CakePHP2+Webservice+j-UI"是一个关于构建Web应用程序的集成环境,其中包含了多种技术的结合。XAMPP是一个流行的开源开发平台,包括Apache服务器、MySQL数据库、PHP和Perl语言,用于快速搭建本地开发...
ssl自制全套证书(包含服务器端、客户端、ca端的证书,格式有.crt,.key,.truststore,.keystore,.p12,.cer,.pem等类型),当时要配置webservice接口、tomca、nginx通过ssl访问的证书,弄了好久才生成了一套能使用的。...
标题中的“xfire+spring+webservice+client”是一个关于集成XFire、Spring框架和Web服务客户端的专题,这涉及到Java开发中的一项重要技术——Web服务的消费与提供。在这个主题下,我们将深入探讨以下几个核心知识点...
Struts、Spring、Hibernate以及WebService是Java开发中常用的四大框架,它们在企业级应用开发中发挥着关键作用。本文将详细介绍这四大框架的集成架构及其核心功能。 **Struts** Struts是一个开源的MVC(Model-View-...
axis+webservice教程+帮助文档
蛮简陋的一个项目,适合新手使用。 这是一个包含简单登录和查询的Web项目,内附有一个表sql文件和两个java项目。...WS_Client是客户端,是一个project项目,内部有一个WebService的测试类,用来测试从服务端取得数据
Java WebService与Tomcat是开发和部署Web服务的常用组合。WebService是一种基于标准的、平台无关的通信方式,允许不同的应用程序之间交换数据。Tomcat是一款轻量级的Java应用服务器,广泛用于部署Java Web应用程序,...
【标题】"maven-spring-mybatis-web+webservice" 概述 在现代Web开发中,Maven、Spring、MyBatis和Web服务(Webservice)是四个关键的组件,它们共同构建了一个强大且灵活的后端架构。这个项目组合,简称为“mmsw”...
【标题】"webservice动态访问天气预报(tomcat+jsp+servlet+webservice+cxf)"涉及的关键技术栈包括Web服务、服务器管理、前端交互等多个方面。本文将深入探讨这些技术在实现动态天气预报功能中的应用。 【描述】中...
本项目“AjaxToolkit+WebService+XML三级联动”利用了AJAX、ASP.NET的AjaxToolkit、WebService以及XML数据格式来构建这样一个功能。下面将详细介绍这些技术及其在项目中的应用。 首先,AJAX(Asynchronous ...
综合来看,这个“silverlight+Linq+webservice+xml留言板”项目结合了多种核心技术,展示了如何利用Silverlight创建交互式用户界面,通过Web服务实现前后端通信,以及使用LINQ to XML处理XML数据。这为学习和理解...
axis+webservice详尽教程(含初高级用法).pdfaxis+webservice详尽教程(含初高级用法).pdfaxis+webservice详尽教程(含初高级用法).pdf
这个"WebService+Json DEMO"是一个示例项目,演示了如何使用WebService结合Json进行数据交换。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web...
在IT领域,Flex和WebService是两个重要的技术概念,它们经常被用于构建富互联网应用程序(RIA)。本教程将探讨如何利用Flex作为前端客户端,通过WebService进行附件的上传和下载操作。 Flex是一款由Adobe开发的开源...