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

合集下载

使用tomcat配置SSL双向认证

使用tomcat配置SSL双向认证

在Tomcat 6中配置SSL双向认证是相当容易的,本文将介绍如何使用JDK的keytool来为Tomcat配置双向SSL认证。

系统需求:JDK 5.0Tomcat 6.0.16第一步:为服务器生成证书使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在“C:\tomcat.keystore”,口令为“password”,使用如下命令生成:如果Tomcat所在服务器的域名不是“localhost”,应改为对应的域名,如“”,否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。

在本地做开发测试时,应填入“localhost”第二步:为客户端生成证书下一步是为浏览器生成证书,以便让服务器来验证它。

为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,因此,使用如下命令生成:对应的证书库存放在“C:\my.p12”,客户端的CN可以是任意值。

稍候,我们将把这个“my.p12”证书库导入到IE和Firefox中。

第三步:让服务器信任客户端证书由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。

由于不能直接将PKCS12格式的证书库导入,我们必须先把客户端证书导出为一个单独的CER文件,使用如下命令:通过以上命令,客户端证书就被我们导出到“C:\my.cer”文件了。

下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:通过list命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:第四步:配置Tomcat服务器打开Tomcat根目录下的/conf/server.xml,找到如下配置段,修改如下:<Connector protocol="org.apache.coyote.http11.Http11Protocol"port="8443" minSpareThreads="5" maxSpareThreads="75"enableLookups="true" disableUploadTimeout="true"acceptCount="100" maxThreads="200"scheme="https" secure="true" SSLEnabled="true"keystoreFile="c:\tomcat.keystore"keystorePass="password"clientAuth="false" sslProtocol="TLS"/>其中,clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。

Java实现SSL双向认证的方法

Java实现SSL双向认证的方法

Java实现SSL双向认证的⽅法本⽂实例讲述了Java实现SSL双向认证的⽅法。

分享给⼤家供⼤家参考,具体如下:我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法。

这个就是所谓的SSL单向认证。

但是实际中,我们有可能还会验证客户端是否符合要求,也就是给我们每个⽤户颁发⼀个证书,⽐且每个数字证书都是唯⼀的,不公开的。

这样就能通过这个数字证书保证当前访问我服务器的这个⽤户是经过服务器认可的,其他⼈不可访问。

双向认证从第⼀个层⾯上确保了服务器与客户端都是互相认可的。

那么他们之间要进⾏通信,就会在通信协议上附加SSL协议,确保通信的内容是加密的,即使是sniffer这样的⽹络嗅探⼯具看到的都是乱码。

以后给⼤家演⽰下不加密的情况下,⽤sniffer看到的是什么。

恐怕这样你就能提⾼警惕了。

以下内容从⽹络上摘抄加以实际验证后修改的。

模拟场景:Server端和Client端通信,需要进⾏授权和⾝份的验证,即Client只能接受Server的消息,Server只能接受Client的消息。

实现技术:JSSE(Java Security Socket Extension)是Sun为了解决在Internet上的安全通讯⽽推出的解决⽅案。

它实现了SSL和TSL(传输层安全)协议。

在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。

通过使⽤JSSE,开发⼈员可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。

为了实现消息认证。

Server需要:1)KeyStore: 其中保存服务端的私钥2)Trust KeyStore:其中保存客户端的授权证书同样,Client需要:1)KeyStore:其中保存客户端的私钥2)Trust KeyStore:其中保存服务端的授权证书在这⾥我还是推荐使⽤Java⾃带的keytool命令,去⽣成这样信息⽂件。

双向证书认证流程

双向证书认证流程

双向证书认证流程双向证书认证,听起来是不是有点高大上呢?其实呀,它就是一种互相验证证书的过程啦。

那这个流程是怎么一回事呢?这就来给你唠唠。

一、什么是双向证书认证。

简单来说,双向证书认证就像是两个人见面互相查看身份证一样。

在网络的世界里,不同的主体(比如说服务器和客户端)都有自己的“身份证”,也就是证书。

这个证书包含了很多关于这个主体的信息,像是它是谁,从哪里来之类的。

而双向证书认证呢,就是双方都要把自己的证书拿出来给对方看,互相确认身份的这么一个过程。

这样做的好处可多啦,可以保证双方通信的安全性,防止那些不怀好意的家伙混进来捣乱呢。

二、准备工作。

1. 证书的获取。

不管是服务器还是客户端,都得先有自己的证书才行。

这证书就像是你在网络世界里的通行证。

一般来说,这个证书是要从专门的证书颁发机构(CA)那里获取的。

这个CA就像是一个非常严格的警察叔叔,他会仔细审查你(这里就是申请证书的主体啦)的身份信息,确定你是合法的之后,才会给你颁发证书。

比如说,你是一家公司,想要一个证书来保证你的服务器和客户之间的安全通信,那你就得向CA提交公司的相关信息,像营业执照啦,法人信息啦等等,经过一系列的审核,才能拿到证书。

2. 配置环境。

有了证书还不够呢,还得把相关的环境配置好。

这就像是你拿到了身份证,还得把身份证放在一个合适的地方,方便拿出来给别人看一样。

对于服务器来说,要在服务器的配置文件里设置好证书的相关参数,告诉服务器这个证书在哪里,怎么用。

客户端也是类似的,要在客户端的软件或者设备里做好相应的配置,让它知道怎么找到自己的证书,并且在需要的时候把证书展示出来。

三、认证过程。

1. 发起请求。

一般是客户端先发起请求啦。

就好比你去一个高档的俱乐部,你得先走到门口跟保安说你要进去一样。

客户端会向服务器发送一个请求,这个请求里面就包含了一些信息,比如说我想要访问你这个服务器,我是谁之类的。

但是这时候服务器还不能轻易相信客户端呀,毕竟谁知道这个请求是不是坏人发出来的呢。

tls双向认证流程

tls双向认证流程

tls双向认证流程
TLS双向认证,也称为客户端认证或互相认证,是一种网络安全协议的扩展,用于建立在传输层上的安全连接。

以下是TLS双向认证的基本步骤:
1. 服务器配置:服务器需要配置受信任的数字证书,该证书由CA签发。

配置包括私钥和公钥。

2. 客户端配置:客户端也需要拥有受信任的数字证书,该证书由同一家CA 签发。

配置包括私钥和公钥。

3. 握手协商:当客户端与服务器建立连接时,它们进行一系列握手协商过程,以确定使用的加密算法和其他参数。

4. 证书交换:在握手过程中,服务器会将其数字证书发送给客户端。

客户端使用自己的证书验证服务器的身份。

5. 客户端证书交换:在握手过程中,客户端会将其数字证书发送给服务器。

服务器使用自己的证书验证客户端的身份。

6. 安全连接建立:如果双方成功验证对方的身份,并且握手协商过程成功,安全连接将建立起来。

双方之间的通信将使用加密算法和密钥来保护数据的机密性和完整性。

TLS双向认证提供了更高的安全性,可以防止恶意主机冒充服务器,并确保只有经过身份验证的客户端可以访问受保护的资源。

它在一些安全敏感的应用中广泛应用,如金融交易、电子商务和企业内部通信。

ssl证书认证流程

ssl证书认证流程

ssl证书认证流程SSL证书是一种数字证书,用于确保网站和用户之间的数据传输的安全性。

它通过对网站身份进行验证,加密数据传输,保护用户的敏感信息免受黑客和恶意攻击。

以下是SSL证书认证的基本流程:1. 申请证书:网站管理员首先需要选择一个可信任的证书颁发机构(CA)进行SSL证书申请。

CA是第三方机构,负责验证和确认网站身份的合法性。

通常,CA会提供多种证书类型,管理员可以根据自己的需求选择适合的证书。

2. 提供身份证明:在申请SSL证书时,管理员需要提交一些必要的身份信息来证明网站的合法性。

这些信息可能包括公司注册文件、域名所有权证明、联系信息等。

CA会对这些信息进行审查,并确保申请者具备使用该域名的权限。

3. 完成验证过程:验证过程是确保网站合法性的重要环节。

CA会与管理员联系,并要求提供一些额外的文件或通过特定的审核流程确认网站的所有权。

这可能包括通过电子邮件发送验证代码到管理员的注册邮箱,或将CA的授权文件添加到网站的根目录。

4. 生成证书:一旦身份验证通过,CA将会生成一个数字证书,并使用自己的数字签名来证明该证书的合法性。

数字证书中包含了网站的公钥和相关信息。

CA会将证书发送给管理员,管理员需要将其安装到网站的服务器上。

5. 配置服务器:一旦证书安装完毕,管理员需要对网站的服务器进行相应的配置,以使其与SSL证书配合工作。

这可能涉及到启用SSL协议、加密传输等细节设置。

配置完成后,网站将可以通过HTTPS协议提供安全的数据传输。

6. 更新证书:SSL证书的有效期通常为一年或更长时间,过期后需要进行更新。

在证书到期前,管理员需要与CA联系并重新申请证书,并按照上述步骤重新进行验证和安装。

通过SSL证书认证流程,网站可以获得一个可信的标识,让用户放心地与其进行交互和传输敏感信息。

同时,网站管理员也应定期检查证书的有效期,并及时进行更新和维护,以保证网站的安全性和可靠性。

SSL双向认证(高清版)

SSL双向认证(高清版)

SSL双向认证(⾼清版)介绍了SSL双向认证的⼀些基本问题,以及使⽤Nginx+PHP基于它搭建https的Webservice。

之前的⽅式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这⾥我再整理记录下。

由于nginx的ssl_client_certificate参数只能指定⼀个客户端公钥,如果增加⼀个客户端进⾏通信就要重新配⼀个server。

n:1的模式是通过CA的级联证书模式实现的,⾸先⾃⼰⽣成⼀套CA根级证书,再借助其⽣成⼆级证书作为client证书。

此时client私钥签名不仅可以通过对应的client公钥验证,还可通过根证书的公钥进⾏验证。

看到这⾥应该豁然开朗了吧,下⾯简单介绍下具体怎么操作:1 准备⼯作1.1 openssl⽬录准备⼀般情况下openssl的配置⽂件都在这个⽬录/etc/pki/tls,so:mkdir /etc/pki/ca_linvocd /etc/pki/ca_linvomkdir root server client newcertsecho 01 > serialecho 01 > crlnumbertouch index.txt1.2 openssl配置准备修改openssl配置vi /etc/pki/tls/f找到这句注释掉,替换为下⾯那句#default_ca = CA_defaultdefault_ca = CA_linvo把整个部分拷贝⼀份,改成上⾯的名字[ CA_linvo ]修改⾥⾯的如下参数:dir = /etc/pki/ca_linvocertificate = $dir/root/ca.crtprivate_key = $dir/root/ca.key保存退出2 创建CA根级证书⽣成key:openssl genrsa -out /etc/pki/ca_linvo/root/ca.key⽣成csr:openssl req -new -key /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.csr⽣成crt:openssl x509 -req -days 3650 -in /etc/pki/ca_linvo/root/ca.csr -signkey /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.crt ⽣成crl:openssl ca -gencrl -out /etc/pki/ca_linvo/root/ca.crl -crldays 7⽣成的根级证书⽂件都在/etc/pki/ca_linvo/root/⽬录下注意:创建证书时,建议证书密码设置长度>=6位,因为java的keytool⼯具貌似对它有要求。

SSL单向认证和双向认证交互流程

SSL单向认证和双向认证交互流程

SSL单向认证和双向认证交互流程1.SSL单向认证:- 客户端发起握手请求,向服务器发送一个Client Hello消息,包含有关支持的加密算法和协议版本的信息。

- 服务器收到Client Hello消息后,向客户端发送一个ServerHello消息,包含选择的加密算法和协议版本。

-服务器将生成一个数字证书,其中包含服务器的公钥和其他相关信息,并将其发送给客户端。

-客户端使用预装的根证书颁发机构(CA)的公钥验证服务器证书的有效性。

如果验证成功,客户端随机生成一个对称密钥,使用服务器的公钥进行加密,并将其发送给服务器。

-服务器使用私钥解密客户端发送的对称密钥,并将其用作会话密钥。

同时,服务器生成一个数字证书和与会话相关的其他信息,并将其返回给客户端。

-客户端使用会话密钥加密握手过程中的后续通信。

2.SSL双向认证:- 客户端发起握手请求,向服务器发送一个Client Hello消息,包含有关支持的加密算法和协议版本的信息。

- 服务器收到Client Hello消息后,向客户端发送一个ServerHello消息,包含选择的加密算法和协议版本。

同时,服务器生成一个数字证书,其中包含服务器的公钥和其他相关信息,并将其发送给客户端。

-客户端使用预装的根证书颁发机构(CA)的公钥验证服务器证书的有效性。

如果验证成功,客户端将向服务器发送一个已经验证的客户端证书。

-服务器验证客户端证书的有效性,如果验证成功,服务器使用客户端的公钥加密随机生成的会话密钥,并将其发送给客户端。

-客户端使用私钥解密服务器发送的会话密钥,并将其用作会话密钥。

-双向认证的SSL会话将使用会话密钥进行后续通信。

总结:单向认证中,只有服务器需要提供证书来验证其身份,而双向认证中,不仅服务器需要提供证书,客户端也需要提供证书来验证其身份。

单向认证可以确保服务器的身份,双向认证可以确保服务器和客户端的身份。

需要注意的是,以上描述的交互流程是一个简化版本,实际的SSL/TLS握手过程可能涉及更多的消息交换和协商步骤,以确保通信的完整性、安全性和可靠性。

SSL协议(HTTPS)握手、工作流程详解(双向HTTPS流程)

SSL协议(HTTPS)握手、工作流程详解(双向HTTPS流程)

SSL协议(HTTPS)握⼿、⼯作流程详解(双向HTTPS流程)SSL协议的⼯作流程:服务器认证阶段:1)客户端向服务器发送⼀个开始信息“Hello”以便开始⼀个新的会话连接;2)服务器根据客户的信息确定是否需要⽣成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含⽣成主密钥所需的信息;3)客户根据收到的服务器响应信息,产⽣⼀个主密钥,并⽤服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户⼀个⽤主密钥认证的信息,以此让客户认证服务器。

⽤户认证阶段:在此之前,服务器已经通过了客户认证,这⼀阶段主要完成对客户的认证。

经认证的服务器发送⼀个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从⽽向服务器提供认证。

从SSL 协议所提供的服务及其⼯作流程可以看出,SSL协议运⾏的基础是商家对消费者信息保密的承诺,这就有利于商家⽽不利于消费者。

在电⼦商务初级阶段,由于运作电⼦商务的企业⼤多是信誉较⾼的⼤公司,因此这问题还没有充分暴露出来。

但随着电⼦商务的发展,各中⼩型公司也参与进来,这样在电⼦⽀付过程中的单⼀认证问题就越来越突出。

虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双⽅的⾝份验证,但是SSL协议仍存在⼀些问题,⽐如,只能提供交易中客户与服务器间的双⽅认证,在涉及多⽅的电⼦交易中,SSL协议并不能协调各⽅间的安全传输和信任关系。

在这种情况下,Visa和 MasterCard两⼤信⽤卡公组织制定了SET协议,为⽹上信⽤卡⽀付提供了全球性的标准。

SSL协议的握⼿过程 为了便于更好的认识和理解 SSL 协议,这⾥着重介绍 SSL 协议的握⼿协议。

SSL 协议既⽤到了公钥加密技术(⾮对称加密)⼜⽤到了对称加密技术,SSL对传输内容的加密是采⽤的对称加密,然后对对称加密的密钥使⽤公钥进⾏⾮对称加密。

这样做的好处是,对称加密技术⽐公钥加密技术的速度快,可⽤来加密较⼤的传输内容,公钥加密技术相对较慢,提供了更好的⾝份认证技术,可⽤来加密对称加密过程使⽤的密钥。

Tomcat下使用ssl实现双向认证(http转换为https)

Tomcat下使用ssl实现双向认证(http转换为https)

Tomcat下使用ssl实现双向认证(http转换为https)理解单向双向认证:单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到客户端的服务器公钥对数据加密传给服务器端,服务器用私钥对数据进行解密,这就完成了客户端和服务器之间通信的安全问题,但是单向认证没有验证客户端的合法性。

双向认证:客户端向服务器发送消息,首先把消息用客户端证书加密然后连同时把客户端证书一起发送到服务器端,服务器接到消息后用首先用客户端证书把消息解密,然后用服务器私钥把消息加密,把服务器证书和消息一起发送到客户端,客户端用发来的服务器证书对消息进行解密,然后用服务器的证书对消息加密,然后在用客户端的证书对消息在进行一次加密,连同加密消息和客户端证书一起发送到服务器端,到服务器端首先用客户端传来的证书对消息进行解密,确保消息是这个客户发来的,然后用服务器端的私钥对消息在进行解密这个便得到了明文数据。

1.SSL(Server Socket Layer)简介在网络上信息在源-宿的传递过程中会经过其它的计算机。

一般情况下,中间的计算机不会监听路过的信息。

但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。

由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。

随着网上支付的不断发展,人们对信息安全的要求越来越高。

因此Netscape 公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。

之后IETF(/doc/bb407972.html,)对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。

ssl双向认证流程

ssl双向认证流程

ssl双向认证流程
SSL双向认证流程,也叫客户端证书认证或双向SSL认证,
是一种加强网络安全的方式,用于在SSL/TLS握手过程中进
行双向验证。

以下是SSL双向认证流程的步骤:
1. 客户端向服务器发送SSL连接请求,并提供自己的加密套
件列表和支持的SSL/TLS版本。

2. 服务器将自己的证书发送给客户端。

该证书应包含服务器的公钥和服务器的身份信息。

证书通常由数字证书颁发机构(CA)签名,以提供认证。

3. 客户端收到服务器的证书后,会验证证书的合法性。

它会检查证书的签名、颁发机构是否受信任,以及证书是否过期等。

如果证书验证失败,客户端会终止连接。

4. 客户端生成用于对称加密的秘密密钥,并使用服务器的公钥对其进行加密。

这样,只有服务器才能使用其私钥解密该密钥。

5. 客户端将加密后的秘密密钥发送给服务器。

6. 服务器使用其私钥解密客户端发送的秘密密钥。

7. 服务器将向客户端发送一个“服务器完成”消息,表示该握手过程完成。

8. 服务器和客户端现在都持有对称密钥,可以进行安全的通信。

它们可以使用对称密钥进行加密和解密,以保护数据的机密性。

通过SSL双向认证,服务器可以验证客户端的身份,并可选
择性地仅允许受信任的客户端连接。

这提供了额外的安全性,尤其适用于需要双向身份验证的敏感应用程序和网络环境。

python ssl 双向认证例程

python ssl 双向认证例程

Python SSL 双向认证例程1. 导言在网络通信中,安全性是至关重要的。

为了保障数据传输的安全性,很多应用程序都会采用SSL(Secure Socket Layer)协议进行加密通信。

而在SSL协议中,双向认证是一种较为安全的验证方式,可以有效防止中间人攻击。

Python作为一种广泛使用的编程语言,对于SSL 双向认证也有相应的支持。

本文将介绍Python中的SSL双向认证的例程及其实现。

2. 什么是SSL双向认证SSL双向认证,又称客户端证书认证,是指在SSL/TLS握手协商的过程中,服务器除了验证客户端的身份外,客户端也需要验证服务器的身份。

通常情况下,SSL/TLS的握手过程只需要服务器提供证书给客户端,客户端对证书进行验证,并与服务器协商密钥。

而双向认证则在这一过程中增加了客户端也提供证书给服务器,并由服务器进行验证的步骤。

3. Python中的SSL双向认证在Python中,SSL/TLS的双向认证可以通过ssl模块来实现。

ssl模块提供了对SSL/TLS协议的支持,并且可以进行双向认证。

下面将介绍Python中的SSL双向认证的例程。

4. 生成证书在进行SSL双向认证之前,首先需要生成证书。

证书是SSL/TLS通信中进行身份验证的重要依据,客户端和服务器都需要提供自己的证书。

可以使用openssl工具来生成证书。

首先生成服务器的私钥和公钥:```shellopenssl genrsa -out server.key 2048openssl req -new -key server.key -out server.csropenssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt```同样的,生成客户端的私钥和公钥:```shellopenssl genrsa -out client.key 2048openssl req -new -key client.key -out client.csropenssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt```生成完证书后,将服务器的公钥和证书放在server.crt文件中,将客户端的公钥和证书放在client.crt文件中。

SSL单向认证和双向认证交互流程

SSL单向认证和双向认证交互流程

SSL单向认证和双向认证交互流程SSL(Secure Sockets Layer)是一种网络安全协议,用于在客户端和服务器之间建立加密通道,确保通信过程中的数据传输安全。

SSL认证是通过SSL证书来验证通信双方身份的过程。

SSL单向认证和双向认证的交互流程如下:1.SSL单向认证:- 客户端请求与服务器建立连接并发送一个Hello消息。

- 服务器收到客户端的Hello消息后,返回一条Hello消息给客户端。

这条消息告诉客户端服务器所支持的SSL/TLS版本和其他参数。

- 客户端收到服务器的Hello消息后,验证服务器的证书是否有效。

证书中包含了服务器的公钥,客户端使用证书中的公钥对其进行解密和验证。

-客户端生成一个随机值,使用服务器的公钥对其进行加密,并将加密后的值发送给服务器。

这个随机值将用于对称加密算法的密钥生成。

-服务器使用自己的私钥对接收到的加密随机值进行解密,并将解密后的值作为对称加密算法的密钥。

-客户端和服务器开始使用对称加密算法对通信数据进行加密和解密。

2.SSL双向认证:- 客户端请求与服务器建立连接并发送一个Hello消息。

- 服务器收到客户端的Hello消息后,返回一条Hello消息给客户端。

这条消息告诉客户端服务器所支持的SSL/TLS版本和其他参数。

- 客户端收到服务器的Hello消息后,验证服务器的证书是否有效。

-客户端生成一个随机值,使用服务器的公钥对其进行加密,并将加密后的值发送给服务器。

-服务器使用自己的私钥对接收到的加密随机值进行解密,并将解密后的值作为对称加密算法的密钥。

-服务器要求客户端提供一个客户端证书。

客户端将自己的证书发送给服务器。

-服务器验证客户端的证书是否有效。

-客户端和服务器开始使用对称加密算法对通信数据进行加密和解密。

3.双向认证的区别与优势:-双向认证需要客户端和服务器都拥有有效的证书,而单向认证仅需要服务器有有效的证书。

这使得双向认证更为安全,可以防止恶意客户端的攻击。

Openssl实现双向认证教程(附服务端客户端代码)

Openssl实现双向认证教程(附服务端客户端代码)

Openssl实现双向认证教程(附服务端客户端代码)⼀、背景说明1.1 ⾯临问题最近⼀份产品检测报告建议使⽤基于pki的认证⽅式,由于产品已实现https,商量之下认为其意思是使⽤双向认证以处理中间⼈形式攻击。

《信息安全⼯程》中接触过双向认证,但有两个问题。

第⼀个是当时最终的课程设计客户端是浏览器,服务端是tomcat双向认证只需要对两者进⾏配置并不需要⾃⼰真的实现代码。

第⼆个是虽然课程也有接近双向认证的实现代码,但当时是Java+JCE环境现在要⽤C+++OpenSSL环境,总体意思确实还是差不多但具体函数和参数差别还是不少。

所以眼下有的是:证书⽣成的思想+双向认证实现的思想。

对读者⽽⾔,即要假定已对证书、SSL/TSL、socket编程等⼏个概念有基本的了解,本⽂不做详细介绍。

基于此本⽂要解决的问题是:openssl具体如何⽣成证书+openssl如何实现双向认证。

双向认证的关键点在以下⼏个函数(服务端和客户端都⼀样),其他就不细说参看代码注释:SSL_CTX_set_verify----配置启⽤双向认证SSL_CTX_load_verify_locations----加载信任的根证书SSL_CTX_use_certificate_file----加载⾃⼰的证书SSL_CTX_use_PrivateKey_file----加载⾃⼰的私钥SSL_get_verify_result----真正进⾏验证,⼀定要调⽤这个函数不然前⾯四个光配置⽽已并不会进⾏双向验证⼆、双向认证程序实现2.1 安装openssl及开发apiapt-get install libssl-dev2.2 服务端代码#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h>#include <openssl/ssl.h>#include <openssl/err.h>#define MAXBUF 1024void ShowCerts(SSL * ssl){X509 *cert;char *line;cert = SSL_get_peer_certificate(ssl);// SSL_get_verify_result()是重点,SSL_CTX_set_verify()只是配置启不启⽤并没有执⾏认证,调⽤该函数才会真证进⾏证书认证// 如果验证不通过,那么程序抛出异常中⽌连接if(SSL_get_verify_result(ssl) == X509_V_OK){printf("证书验证通过\n");}if (cert != NULL) {printf("数字证书信息:\n");line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);printf("证书: %s\n", line);free(line);line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);printf("颁发者: %s\n", line);free(line);X509_free(cert);} elseprintf("⽆证书信息!\n");}int main(int argc, char **argv) {int sockfd, new_fd;socklen_t len;struct sockaddr_in my_addr, their_addr;unsigned int myport, lisnum;char buf[MAXBUF + 1];SSL_CTX *ctx;if (argv[1])myport = atoi(argv[1]);elsemyport = 7838;if (argv[2])lisnum = atoi(argv[2]);elselisnum = 2;/* SSL 库初始化 */SSL_library_init();/* 载⼊所有 SSL 算法 */OpenSSL_add_all_algorithms();/* 载⼊所有 SSL 错误消息 */SSL_load_error_strings();/* 以 SSL V2 和 V3 标准兼容⽅式产⽣⼀个 SSL_CTX ,即 SSL Content Text */ctx = SSL_CTX_new(SSLv23_server_method());/* 也可以⽤ SSLv2_server_method() 或 SSLv3_server_method() 单独表⽰ V2 或 V3标准 */if (ctx == NULL) {ERR_print_errors_fp(stdout);exit(1);}// 双向验证// SSL_VERIFY_PEER---要求对证书进⾏认证,没有证书也会放⾏// SSL_VERIFY_FAIL_IF_NO_PEER_CERT---要求客户端需要提供证书,但验证发现单独使⽤没有证书也会放⾏ SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);// 设置信任根证书if (SSL_CTX_load_verify_locations(ctx, "ca.crt",NULL)<=0){ERR_print_errors_fp(stdout);exit(1);}/* 载⼊⽤户的数字证书,此证书⽤来发送给客户端。

SSL双向认证过程

SSL双向认证过程

SSL双向认证过程SSL(Secure Sockets Layer)是一种常用的网络安全协议,用于在客户端与服务器之间建立安全的通信连接。

SSL双向认证,也称为客户端证书认证,是一种加强认证安全性的方式,需要客户端和服务器互相验证对方的身份。

以下是SSL双向认证的详细过程:1.客户端发起请求:客户端向服务器发起SSL连接请求,请求建立安全的通信连接。

2.服务器发送证书:服务器收到请求后,向客户端发送自己的数字证书。

数字证书是由可信的第三方机构颁发的,用于证明服务器的身份的文件。

证书中包含了服务器的公钥,以及颁发机构的数字签名。

3.客户端验证证书:客户端收到服务器的证书后,首先要验证证书的合法性。

验证方式如下:-客户端使用内置的根证书颁发机构列表,对服务器的证书进行验证。

如果证书有效且可信,则进入下一步。

否则,客户端会警告用户证书不受信任或无效。

- 客户端提取证书中的公钥,并使用颁发机构的公钥对证书进行验证。

验证通过后,客户端生成一个随机值(Pre-master Secret)。

- 客户端使用服务器的公钥对Pre-master Secret进行加密,然后发送给服务器。

4. 服务器解密Pre-master Secret:服务器收到客户端的加密Pre-master Secret后,使用自己的私钥进行解密,得到Pre-master Secret。

5. 客户端和服务器生成会话密钥:客户端和服务器分别使用Pre-master Secret生成会话密钥(Session Key)。

6.客户端发送加密信息:客户端使用会话密钥对消息进行加密,并发送给服务器。

7.服务器解密信息:服务器收到加密消息后,使用会话密钥解密,获取原始信息。

8.服务器发送加密响应:服务器使用会话密钥对响应进行加密,然后发送给客户端。

9.客户端解密响应:客户端收到加密响应后,使用会话密钥解密,获取原始响应。

通过以上过程,客户端和服务器建立了一个安全的通信连接,双方可以进行加密通信,确保数据的机密性和完整性。

WEB服务器SSL双向认证安装使用指南

WEB服务器SSL双向认证安装使用指南

WEB服务器SSL双向认证安装使用指南一、SSL证书的准备在进行SSL双向认证前,我们需要准备以下材料:1.服务器的私钥和证书签名请求文件(CSR);2.CA机构签发的数字证书;3.客户端的数字证书。

二、生成服务器私钥和证书签名请求文件1.在服务器上生成私钥:运行以下命令:openssl genrsa -out server.key 2048这将生成一个2048位的私钥file。

2.生成CSR文件:三、获取CA机构签发证书1.将CSR文件发送给CA机构:将生成的server.csr文件发送给CA机构,并根据CA机构的要求进行身份验证。

2.获取CA机构签发的数字证书:CA机构将根据验证结果进行相应处理,如果验证通过,将会签发一个数字证书,通常是一个.crt文件。

四、生成客户端证书1.生成私钥:运行以下命令:openssl genrsa -out client.key 2048这将生成一个2048位的客户端私钥file。

2.生成CSR文件:运行以下命令:openssl req -new -subj "/CN=client" -key client.key -out client.csr3.获取CA签发的数字证书:将生成的client.csr文件发送给CA机构,获取CA机构签发的数字证书.crt文件。

五、安装证书1.安装服务器证书:将服务器证书文件(.crt)和私钥文件(.key)放置在服务器的SSL 证书存储路径下,通常是/etc/ssl/certs和/etc/ssl/private。

2.安装客户端证书:将客户端证书文件(.crt)和私钥文件(.key)放置在客户端的SSL 证书存储路径下,通常是浏览器的证书库或操作系统的个人证书库。

六、配置WEB服务器1.配置服务器:在WEB服务器的配置文件中,添加以下内容:SSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.keySSLCACertificateFile /etc/ssl/certs/ca.crtSSLVerifyClient requireSSLVerifyDepth 32.重启服务器:完成配置后,重启WEB服务器以使配置生效。

在mina中实现SSL双向认证证书生成操作手册

在mina中实现SSL双向认证证书生成操作手册

1.文件夹建立新建一个文件夹如demoCA,进入demoCA,最好将cmd.exe拷贝到demoCA文件夹中,在demoCA目录下分别建立一个文件夹newcerts,一个文件index.txt,点击cmd.exe,敲入命令Echo 01 > serial 回车,然后将c:\openssl目录下的f拷贝到demoCA目录下,在DOS命令下,敲入edit f,将dir = /demoCA修改dir = ./即可2.生成CA证书openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650 -config f说明(证书相关属性模板--下面的keytool生成要与这里相同):Countty Name: CNState or Province Name:shanghaiLocality Name:shanghaiOrganization Name:chinaumsOrganization Unit Name:developmemtCommon Name:chexEmail Address:chex227@3.生成server端证书:1)生成KeyPair生成密钥对keytool -genkey -alias server -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=chex, OU=development,O=chinaums, L=shanghai, S=shanghai, C=CN" -keypass 123456 -storepass 123456 -keystore server.jks2)生成证书签名请求keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass 123456 -storepass 123456 -keystore server.jks3)用CA私钥进行签名,也可以到权威机构申请CA签名openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config f4)导入信任的CA根证书到keystorekeytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore server.jks 5.1)5)把CA签名后的server端证书导入keystore格式化server.crt,否则用keytool import的时候会出现error:invalid DER-encoded certificate dataopenssl x509 -in server.crt -out server.der -outform DERkeytool -import -v -alias server -file server.der -keypass 123456 -storepass 123456 -keystore server.jksJava版client4.生成Client证书1)生成KeyPair生成密钥对keytool -genkey -alias client -keysize 1024 -validity 3650 -keyalg RSA -dname "CN=client, OU=development,O=chinaums, L=shanghai, S=shanghai, C=CN" -keypass 123456 -storepass 123456 -keystore client.jks2)生成证书签名请求keytool -certreq -alias client -sigalg MD5withRSA -file client.csr -keypass 123456 -storepass 123456 -keystore client.jks3)用CA私钥进行签名,也可以到权威机构申请CA签名openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config f4)导入信任的CA根证书到keystorekeytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 123456 -keystore client.jks5)把CA签名后的server端证书导入keystore格式化server.crt,否则用keytool import的时候会出现error:invalid DER-encoded certificate dataopenssl x509 -in client.crt -out client.der -outform DERkeytool -import -v -alias client -file client.der -keypass 123456 -storepass 123456 -keystore client.jksC++版client1.生成客户端私钥文件Openssl >genrsa -out clt.key 10242.想自定义CA提交签名申请Openssl >req -new -key clt.key -out clt.csr -config f个人设置同server端3.用自定义CA签名客户端Openssl > ca -in clt.csr -out clt.crt -cert ca.crt -keyfile ca.key -config f然后将clt.key,ca.crt,clt.crt复制到C:\gmc目录即可。

ssl证书生成过程的算法

ssl证书生成过程的算法

ssl证书生成过程的算法
SSL证书生成过程涉及到公钥基础设施(PKI)和非对称加密算法。

一般来说,SSL证书的生成过程包括以下步骤:
1. 密钥对生成,首先,使用非对称加密算法(如RSA或ECC)生成一个密钥对,包括一个私钥和一个公钥。

私钥用于签署数据和解密信息,而公钥用于验证签名和加密信息。

2. 证书请求生成,接下来,使用生成的密钥对创建一个证书请求(CSR),其中包含了将被证书颁发机构(CA)验证的信息,如域名、组织信息等。

3. CA验证,证书请求被发送到CA进行验证。

CA会验证请求中的信息,确保请求者拥有对应的域名或组织,并且符合CA的要求。

4. 签署证书,一旦验证通过,CA会使用自己的私钥对证书请求中的公钥和信息进行签名,生成SSL证书。

5. 证书颁发,CA将签署后的证书返回给请求者,请求者可以将该证书安装到其服务器上,以启用SSL加密通信。

整个过程涉及到非对称加密算法的使用,特别是在证书请求生成和签署证书的过程中。

这些算法保证了私钥的安全性,同时也确保了证书的真实性和完整性。

ssl认证流程

ssl认证流程

ssl认证流程SSL(Secure Sockets Layer)是一种加密协议,它的作用是在网络中建立安全通道,为用户保密性和数据完整性提供保障。

在进行SSL认证时,需要经过以下流程:1. 客户端请求SSL连接当客户端需要建立SSL连接时,会在客户端和服务器之间的网络上发送一个请求。

这个请求目的是告知服务器,客户端希望使用SSL协议建立连接。

这个过程中的请求信息包括:协议版本号、加密算法等。

服务器在接收到客户端发送的SSL连接请求后,会回应成功或者失败。

如果成功,就会在接下来的操作中开始SSL握手过程。

如果失败,那么连接就无法建立。

3. 开始SSL握手过程在SSL握手过程中,客户端和服务器之间进行一系列的交互。

这些交互包括交换加密算法类型、协商密钥、服务器认证,以及生成会话密钥等操作。

在完成这些交互后,客户端和服务器都准备好使用加密通道进行信息的传输。

4. 服务器认证在上一步中,客户端和服务器之间相互交换了一些信息,其中包括服务器的证书。

证书是一个包含了服务器端公钥的文件,由第三方权威机构认证。

客户端会使用证书来验证服务器的身份是否真实有效,如果验证成功,就可认为服务器确实是访问者所期望的服务器。

5. 生成会话密钥在客户端和服务器之间建立的SSL连接中,使用的是对称加密算法(如AES、DES等)。

对称加密算法的核心是密钥,客户端和服务器都需要同步生成同样的密钥。

会话密钥是由客户端和服务器共同生成的,它是客户端和服务器进行对称加密传输的密钥,被保护在SSL 通讯建立的双方中,无法被第三方获得。

6. 开始传输数据在完成前面的几个步骤后,客户端和服务器就可以使用SSL协议建立起加密通道,开始加密传输数据了。

传输数据时,客户端和服务器都会使用会话密钥进行加密和解密。

当客户端和服务器之间的会话结束时,SSL连接就会被终止。

在这个过程中,客户端和服务器会发送一些终止信号,告知彼此已经完成了数据传输。

在这之后,客户端和服务器之间建立的加密通道也会被关闭。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SSL双向认证证书制作流程
——含单向SSL
一、证书制作:
1、生成服务器密钥(库):
keytool -genkey -alias server -keyalg RSA -keysize 2048 -validity 3650 -dname
"CN=localhost,OU=DTY,O=BMC,L=Beijing,ST=Beijing,C=CN"
-keypass 123456 -keystore server.jks -storepass 123456
CN:要签名的[域名]或[IP](说明:此处为要配置SSL服务器IP 或域名)
OU:组织单位名称,如:[公司注册简称]
O:组织名称,如:[公司英文全称]
L:城市或地区名称,如:[Beijing]
ST:州或省份名称,如:[Beijing]
C:单位的两字母国家代码,如:[CN]
2、验证生成的服务器密钥(库):
keytool -list -v -keystore server.jks -storepass 123456
3、为步骤1生成的服务器密钥(库)创建自签名的证书:
keytool -selfcert -alias server -keystore server.jks -storepass 123456
4、验证生成的服务器密钥(库):
keytool -list -v -keystore server.jks -storepass 123456
5、导出自签名证书:
keytool -export -alias server -keystore server.jks -file server.cer -storepass 123456
说明:此证书为后续要导入到浏览器中的受信任的根证书颁发机构。

6、生成客户端密钥(库):
说明:keytool –genkey命令默认生成的是keystore文件,但为了能顺利导入到IE或其他浏览器中,文件格式应为PKCS12。

稍后,此P12文件将导入到IE或其他浏览器中。

keytool -genkey -alias client -keyalg RSA -keysize 2048 -validity 3650 -dname
"CN=localhost,OU=DTY,O=BMC,L=Beijing,ST=Beijing,C=CN"
-storetype PKCS12 -keypass 123456 -keystore client.p12 -storepass 123456
CN:要签名的[域名]或[IP](特别说明:这里是客户端机构的域名或IP)
OU:组织单位名称,如:[公司注册简称]
O:组织名称,如:[公司英文全称]
L:城市或地区名称,如:[Beijing]
ST:州或省份名称,如:[Beijing]
C:单位的两字母国家代码,如:[CN]
7、提取客户端密钥的公钥:
只有客户端密钥库文件还不行,还需要一个证书文件。

毕竟证书文件才是直接提供给外界的公钥凭证,因此需要将客户端密钥库文件中的公钥导入到某个证书文件中。

keytool -export -alias client -keystore client.p12
-storetype PKCS12 -rfc -file client.cer -storepass 123456
8、将客户端密钥库的公钥导入到服务端密钥库中:
keytool -import -v -file client.cer -keystore server.jks
-storepass 123456
9、验证生成的服务器密钥(库):
keytool -list -v -keystore server.jks -storepass 123456
说明:验证步骤8的公钥是否导出成功。

二、证书导入:
1、导入客户端密钥(库):
a)对于IE浏览器,选择Internet选项,则显示如下:
b)点击证书按钮,显示如下:
c)点击导入,显示如下:
d)点击下一步,显示如下:
注意:选择文件时,必须确认文件格式为:
e)点击下一步,并在密码处键入,创建[客户端密钥(库)]时所
键入的密码,这里是123456:
f)选择下一步,显示如下:
选择[将所有的证书放入下列存储(P)]为:个人,然后点击下一步,显示如下:
g)单击完成,显示如下:
单击确定,自此[客户端密钥(库)]导入浏览器的操作完成。

2、导入服务器密钥(库)受信任的根证书:
a)对于IE浏览器,选择Internet选项,则显示如下:
b)点击证书按钮,显示如下:
c)点击导入,显示如下:
d)点击下一步,显示如下:
e)选择要导入的文件,这里我们选择步骤5导出的server.cer
证书,单击下一步显示如下:
f)选择奖所有的证书放入下列存储:收信人的根证书颁发机构,
点击下一步,显示如下:
g)单击完成,显示如下:
h)由于我们是一个自签名证书,所以windows会给出上面的安全
提示,选择“是”,显示如下:
单击确定,自此[服务器密钥(库)受信任的根证书]导入浏览
器的操作完成。

三、服务器配置SSL:
说明,服务器配置SSL因应用服务器不同,其配置方法也不一样,这里仅以tomcat6为例:
1、配置双向SSL:
a)将服务器密钥(库)文件放置在[%TOMCATE_HOME%/onf]下:
b)修改配置文件[%TOMCATE_HOME%/onf/server.xml]具体配置如
下:
<Connector port="8443" protocol="HTTP/1.1"
2、配置单向SSL:
a)修改配置文件[%TOMCATE_HOME%/onf/server.xml]具体配置如
下:
b)单向证书制作过程描述:
四、补充:
对于证书的安装,在实际使用中一般可以提供一个连接允许用户下载证书。

如下图红框所示:。

相关文档
最新文档