HTTPS与SSL

来源:互联网

1. HTTPS

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面

HTTPS和HTTP的区别

一、https协议需要到ca申请证书,一般免费证书很少,需要交费。

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https的实现原理

有两种基本的加解密算法类型

1)对称加密 :密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密 :密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

https的通信过程

wps_clip_image-17888[3][1]

图2.1 https的通信过程

https通信的优点

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

HTTPS解决的问题

一、信任主机的问题.

采用https的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。所以目前所有的银行系统网站,关键部分应用都是https 的。客户通过信任该证书,从而信任了该主机。其实这样做效率很低,但是银行更侧重安全。这一点对我们没有任何意义,我们的服务器,采用的证书不管是自己发布的还是从公众的地方发布的,其客户端都是自己人,所以我们也就肯定信任该服务器。

二、通讯过程中的数据的泄密和被篡改

1. 一般意义上的https,就是服务器有一个证书。

a) 主要目的是保证服务器就是他声称的服务器,这个跟第一点一样。

b) 服务端和客户端之间的所有通讯,都是加密的。

i. 具体讲,是客户端产生一个对称的密钥,通过服务器的证书来交换密钥,即一般意义上的握手过程。

ii. 接下来所有的信息往来就都是加密的。第三方即使截获,也没有任何意义,因为他没有密钥,当然篡改也就没有什么意义了。

2. 少许对客户端有要求的情况下,会要求客户端也必须有一个证书。

a) 这里客户端证书,其实就类似表示个人信息的时候,除了用户名/密码,还有一个CA 认证过的身份。因为个人证书一般来说是别人无法模拟的,所有这样能够更深的确认自己的身份。

b) 目前少数个人银行的专业版是这种做法,具体证书可能是拿U盘(即U盾)作为一个备份的载体

理解误区

它的安全保护依赖浏览器的正确实现以及服务器软件、实际加密算法的支持.

一种常见的误解是“银行用户在线使用https:就能充分彻底保障他们的银行卡号不被偷窃。”实际上,与服务器的加密连接中能保护银行卡号的部分,只有用户到服务器之间的连接及服务器自身。并不能绝对确保服务器自己是安全的,这点甚至已被攻击者利用,常见例子是模仿银行域名的钓鱼攻击。少数罕见攻击在网站传输客户数据时发生,攻击者会尝试窃听传输中的数据。

商业网站被人们期望迅速尽早引入新的特殊处理程序到金融网关,仅保留传输码(transaction number)。不过他们常常存储银行卡号在同一个数据库里。那些数据库和服务器少数情况有可能被未授权用户攻击和损害。

SSL

SSL介绍

SSL安全套接层协议(Secure Socket Layer)

为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之IE.或Netscape浏览器即可支持SSL。

当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

SSL协议位于TCP/IP协议与各种应用层协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端到端的安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议特点

1)SSL协议可用于保护正常运行于TCP之上的任何应用协议,如HTTP、FTP、SMTP或Telnet的通信,最常见的是用SSL来保护HTTP的通信。

2)SSL协议的优点在于它是与应用层协议无关的。高层的应用协议(如HTTP、FTP、Telnet等)能透明地建立于SSL协议之上。

3)SSL协议在应用层协议之前就已经完成加密算法、通信密钥的协商以及服务器的认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的安全性。

4)SSL协议使用通信双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方间建立起了一条安全的、可信任的通信通道。

5)该协议使用密钥对传送数据加密,许多网站都是通过这种协议从客户端接收信用卡编号等保密信息。常用于交易过程中。

SSL功能

1)客户对服务器的身份认证:

SSL服务器允许客户的浏览器使用标准的公钥加密技术和一些可靠的认证中心(CA)的证书,来确认服务器的合法性。

2)服务器对客户的身份认证:

也可通过公钥技术和证书进行认证,也可通过用户名,password来认证。

3)建立服务器与客户之间安全的数据通道:

SSL要求客户与服务器之间的所有发送的数据都被发送端加密、接收端解密,同时还检查 数据的完整性

SSL协议工作的基本流程

1)接通阶段:客户机通过网络向服务器打招呼,服务器回应

2)密码交换阶段:客户机与服务器之间交换双方认可的密码,一般选用RSA密码算法

3)会谈密码阶段:客户机器与服务器间产生彼此交谈的会谈密码

4)检验阶段:客户机检验服务器取得的密码

5)客户认证阶段:服务器验证客户机的可信度

6)结束阶段:客户机与服务器之间相互交换结束的信息

SSL安全实现原理

SSL 提供了用于启动 TCP/IP 连接的安全性“信号交换”:

1. 这种信号交换导致客户和服务器同意将使用的安全性级别,并履行连接的任何身份验证要求.

2. 通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证。

3.在用数字证书对双方的身份验证后,双方就可以用保密密钥进行安全的会话了。

SSL协议说明

SSL协议具有两层结构:

1)其底层是SSL记录协议层(SSL Record Protocol Layer)

2)其高层是SSL握手协议层(SSL Handshake Protocol Layer), 主要用来让客户端及服务器确认彼此的身分,为了保护SSL记录封包中传送的数据,Handshake协议还能协助双方选择连接时所会使用的加密算法、MAC算法、及相关密钥。

wps_clip_image-16920[3][1]

SSL协议定义了两个通信主体:客户(client)和服务器(server)。其中,客户是协议的发起者

在客户/服务器结构中,应用层从请求服务和提供服务的角度定义客户和服务器,而SSL协议则从建立加密参数的过程中所扮演的角色来定义客户和服务器。

SSL握手协议包含四个阶段:第一个阶段建立安全能力;第二个阶段服务器鉴别和密钥交换;第三个阶段客户鉴别(可选的)和密钥交换;第四个阶段完成握手协议。

SSL协议工作的基本流程

服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

用户认证阶段:

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

SSL流程

wps_clip_image-8646[3][1]

第一步:身份验证

wps_clip_image-7974[3][1]

第二步:发明密语规则

wps_clip_image-17787[3][1]

第三步:密语规则共享

wps_clip_image-23566[3][1]

第四步:进行安全通信

wps_clip_image-3278[3][1]

简要描述

1) 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接

2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息

3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

4) 服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。(以上为服务端认证)

5) 服务器已经通过了客户认证,这一阶段主要完成对客户对服务端的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。(客户端认证)

详细描述

SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下:

1)客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

2)服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

3)客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

4)用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。 (服务端验证成功)

5)如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。

6)如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

7)服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL 协议的安全数据通讯的加解密通讯。同时在SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

8)客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤7中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

9)服务器向客户端发出信息,指明后面的数据通讯将使用的步骤7中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

10)SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

SSL缺点

1)SSL协议需要在握手之前建立TCP连接,因此不能对UDP应用进行保护。

2)为了不致于由于安全协议的使用而导致网络性能大幅下降SSL协议并不是默认地要求进行客户鉴别

CA

Ca介绍

电子商务认证授权机构(CA, Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。

CA是证书的签发机构,它是PKI(Public Key Infrastructure,公钥基础设施)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。

如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

CA认证 证书

证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。

证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。

如何在电子文档上实现签名的目的呢?我们可以使用数字签名。RSA公钥体制可实现对数字信息的数字签名,方法如下:

信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。

在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数) 生成的。对这些HASH函数的特殊要求是:

1.接受的输入报文数据没有长度限制;

2.对任何输入报文数据生成固定长度的摘要(数字指纹)输出;

3.从报文能方便地算出摘要;

4.难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;

5.难以生成两个不同的报文具有相同的摘要。

CA认证验证

接收方在收到信息后用如下的步骤验证您的签名:

1.使用自己的私钥将信息转为明文;

2.使用发信方的公钥从数字签名部分得到原摘要;

3.收方对您所发送的源信息进行hash运算,也产生一个摘要;

4.收方比较两个摘要,如果两者相同,则可以证明信息签名者的身份。

如果两摘要内容不符,会说明:

可能对摘要进行签名所用的私钥不是签名者的私钥,这就表明信息的签名者不可信;也可能收到的信息根本就不是签名者发送的信息,信息在传输过程中已经遭到破坏或篡改。

CA认证 数字证书

数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

CA认证 使用数字证书

数字证书在用户公钥后附加了用户信息及CA的签名。公钥是密钥的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。

wps_clip_image-10644[3][1]

图1.1 发送数据处理过程

wps_clip_image-24798[3][1]

图1.2接收数据处理过程

在线交易中您可使用数字证书验证对方身份。用数字证书加密信息,可以确保只有接收者才能解密、阅读原文,信息在传递过程中的保密性和完整性。有了数字证书网上安全才得以实现,电子邮件、在线交易和信用卡购物的安全才能得到保证。

密钥、密钥对、公钥、证书、私钥、jks、keystore、truststore、cer、pfx的区别

密钥:  公钥+私钥的统称。

密钥对:公钥(证书)和私钥成对存在。

通信双方各持有自己的私钥和对方的公钥。自己的私钥需密切保护,而公钥是公开给对方的。在windows下,单独存在的公钥一般是后缀为.cer的文件

公钥的两个用途:

1。验证对方身份:防止其他人假冒对方发送数据给你。

2。解密。

私钥的两个用途:

1。表明自己身份:除非第三方有你私钥,否则无法假冒你发送数据数据给对方。

2。加密。

jks(java key store):

java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等,千奇百怪。不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已。比如把只包含"受信任的公钥"的容器存成.truststore文件等。

用jdk\bin目录下的keytool.exe对其进行查看,导入,导出,删除,修改密码等各种操作。

可以对jks容器加入密码,输入正确才可以操作此容器中密钥。

还有一个密码的概念与上者不同,是jks中存储着的私钥的密码,通常是绝密的。

pfx:

和jks功能相同但文件格式不同,pfx是浏览器用的。

可以用一些工具程序把pfx转化成jks格式供java程序使用(如银行只提供了pfx)。

常见的几种https系统的访问

经https协议的数据经过加密传输,防止第三方监听,冒充和篡改。

1.不需要用户做任何操作,比如https://www.verisign.com/

这是因为此公钥是合法的(公钥是可信任的机构颁发,和实际域名吻合,而且没有到期)。用IE访问时空白处点右键可以查看公钥信息。

2.https的页面会弹出公钥确认提示

公钥不合法(不是可信任的机构颁发,和实际域名不吻合,已到期),但用户点“是”即表示忽略危险,继续访问。

3.需要往浏览器倒入一个文件才可访问的

一般是银行在线交易等特别需要安全的场合,站方(银行)需要验证访客身份(如要确认必须是已注册的网银商户),需要在浏览器中导入含有访客私钥的pfx文件。

如果java程序访问此地址时在jre默认的信任库中找不到对方证书的颁发机构,则会抛出安全方面的异常。所以要将站方公钥存进一个jks,并在环境变量中设定,表明信任此库中的公钥,才可以正常访问。在浏览器中查看站方公钥时,把公钥导出(一般是cer后缀),然后用keytool.exe手工将此cer导入一个jks

TOMCAL配置单项认证

在命令提示符窗口,进入Tomcat目录,执行以下命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
通过以上步骤生成server.keystore证书文件
将servlet.xml的SSL注释打开

<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="server.keystore"
keystorePass="changeit"/>
到这一步访问基本配置完成.

一般Tomcat默认的SSL端口号是8443,但是对于SSL标准端口号是443,这样在访问网页的时候,直接使用https而不需要输入端口号就可以访问,如https://loalhost/webserver
想要修改端口号,需要修改Tomcat的server.xml文件:

1) non-SSL HTTP/1.1 Connector定义的地方,一般如下:
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
将其中的redirectPort端口号改为:443

2)SSL HTTP/1.1 Connector定义的地方,修改端口号为:443,如下:
<Connector port="443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https"
secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/tomcat.keystore"
keystorePass="123456" />

3)AJP 1.3 Connector定义的地方(apache就是通过AJP协议与tomcat进行通信的),修改redirectPort为443,如下:
<Connector port="8009"
enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
重新启动Tomcat就可以了。到这一步可以形成访问方式 http://ip/item

使用java内置keytool配置tomcat双向SSL认证

在Tomcat 6中配置SSL双向认证是相当容易的,本文将介绍如何使用JDK的keytool来为Tomcat配置双向SSL认证。
系统需求:
JDK 5.0
Tomcat 6.0.16
第一步:为服务器生成证书
使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在“C:/tomcat.keystore”,口令为“password”,使用如下命令生成:

1. keytool -genkey -v -alias tomcat -keyalg RSA -keystore c:/tomcat.keystore -dname

2. "CN=localhost,OU=,O=,L=,ST=,C=" -storepass password -keypass password

复制代码

如果Tomcat所在服务器的域名不是“localhost”,应改为对应的域名,如“www.sina.com.cn”,否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost”
;证书如果没有指定有效期,默认为90天
第二步:为客户端生成证书
下一步是为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,因此,使用如下命令生成:

1. keytool -genkey -v -alias mykey -keyalg RSA -storetyp PKCS12 C:/my.p12

2. -dname "CN=localhost,OU=,O=,L=,ST=,C=" -storepas password -keypass password

复制代码

对应的证书库存放在“C:/my.p12”,客户端的CN可以是任意值。稍候,我们将把这个“my.p12”证书库导入到IE和Firefox中。
第三步:让服务器信任客户端证书
由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们必须先把客户端证书导出为一个单独的CER文件,使用如下命令:

1. keytool -export -alias mykey -keystore cL/my.p12 -storetype PKCS12 -storepass password -rfc -file C:/my.cer

复制代码

通过以上命令,客户端证书就被我们导出到“C:/my.cer”文件了。下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:

1. keytool -import -v -file C:/my.cer -keystore C:/tomcat.keystore -storepass password

复制代码

通过list命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:

1. keytool -list c:/tomcat.keystore -storepass password

复制代码

第四步:配置Tomcat服务器
打开Tomcat根目录下的/conf/server.xml,找到如下配置段,修改如下:

1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

2. maxThreads="150" scheme="https" secure="true"

3. clientAuth="true" sslProtocol="TLS"

4. keystoreFile="C:/tomcat.keystore" keystorePass="password"

5. truststoreFile="C:/tomcat.keystore" truststorePass="password"

6. />

复制代码

其中,clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。如果clientAuth设置为“true”,表示强制双向SSL验证,必须验证客户端证书。如果clientAuth设置为“want”,则表示可以验证客户端证书,但如果客户端没有有效证书,也不强制验证。
第五步:导入客户端证书
如果设置了clientAuth="true",则需要强制验证客户端证书。双击“C:/my.p12”即可将证书导入至IE:
导入证书后,即可启动Tomcat,用IE进行访问。如果需要用FireFox访问,则需将证书导入至FireFox:

配置Flex使用安全通道

1.在services-config.xml中创建节点

<channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">

<endpointurl="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure"class="flex.messaging.endpoints.SecureAMFEndpoint" />

<properties>

<add-no-cache-headers>false</add-no-cache-headers>

</properties>

</channel-definition>

2.修改自定义通道的url和class,如:

<channel-definition id="resource-streaming-amf"

class="mx.messaging.channels.SecureStreamingAMFChannel">

<endpoint url=https://{server.name}:{server.port}/{context.root}/messagebroker/resourcestreamingamf

class="flex.messaging.endpoints.SecureStreamingAMFEndpoint" />

3.修改proxy-config.xml中的default-channels,如:

<default-channels>

<channel ref="my-secure-amf"/>

</default-channels>

4.修改remoting-config.xml中的default-channels,如:

<default-channels>

<channel ref="my-secure-amf" />

</default-channels>

5.在as中使用_remoteObject.endpoint的地方修改value:

https://{server.name}:{server.port}/项目名称/messagebroker/amfsecure

发表评论