HTTPS的测试
https证书的验证过程与生成方法
https证书的验证过程与⽣成⽅法1.简洁的解释:1.服务器⽤RSA⽣成公钥和私钥2.把公钥放在证书⾥发送给客户端,私钥⾃⼰保存3.客户端⾸先向⼀个权威的服务器检查证书的合法性,如果证书合法,客户端产⽣⼀段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,⽤公钥加密这段随机数,然后发送到服务器4.服务器⽤密钥解密获取对称密钥,然后,双⽅就已对称密钥进⾏加密解密通信了PS:⾮对称的RSA加密性能是⾮常低的,原因在于寻找⼤素数、⼤数计算、数据分割需要耗费很多的CPU周期,所以⼀般的HTTPS连接只在第⼀次握⼿时使⽤⾮对称加密,通过握⼿交换对称加密密钥,在之后的通信⾛对称加密。
2.详细的:1.浏览器将⾃⼰⽀持的⼀套加密规则发送给⽹站。
2.⽹站从中选出⼀组加密算法与HASH算法,并将⾃⼰的⾝份信息以证书的形式发回给浏览器。
证书⾥⾯包含了⽹站地址,加密公钥,以及证书的颁发机构等信息。
3.浏览器获得⽹站证书之后浏览器要做以下⼯作:a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的⽹站地址是否与正在访问的地址⼀致等),如果证书受信任,则浏览器栏⾥⾯会显⽰⼀个⼩锁头,否则会给出证书不受信的提⽰。
b) 如果证书受信任,或者是⽤户接受了不受信的证书,浏览器会⽣成⼀串随机数的密码,并⽤证书中提供的公钥加密。
c) 使⽤约定好的HASH算法计算握⼿消息,并使⽤⽣成的随机数对消息进⾏加密,最后将之前⽣成的所有信息发送给⽹站。
4.⽹站接收浏览器发来的数据之后要做以下的操作:a) 使⽤⾃⼰的私钥将信息解密取出密码,使⽤密码解密浏览器发来的握⼿消息,并验证HASH是否与浏览器发来的⼀致。
b) 使⽤密码加密⼀段握⼿消息,发送给浏览器。
5.浏览器解密并计算握⼿消息的HASH,如果与服务端发来的HASH⼀致,此时握⼿过程结束,之后所有的通信数据将由之前浏览器⽣成的随机密码并利⽤对称加密算法进⾏加密。
3.实现:⽣成密钥、证书第⼀步,为服务器端和客户端准备公钥、私钥[java]1. # ⽣成服务器端私钥2. openssl genrsa -out server.key 10243. # ⽣成服务器端公钥4. openssl rsa -in server.key -pubout -out server.pem5.6.7. # ⽣成客户端私钥8. openssl genrsa -out client.key 10249. # ⽣成客户端公钥10. openssl rsa -in client.key -pubout -out client.pem第⼆步,⽣成 CA 证书[java]1. # ⽣成 CA 私钥2. openssl genrsa -out ca.key 10243. # X.509 Certificate Signing Request (CSR) Management.4. openssl req -new -key ca.key -out ca.csr5. # X.509 Certificate Data Management.6. openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt在执⾏第⼆步时会出现:[java]1. ➜ keys openssl req -new -key ca.key -out ca.csr2. You are about to be asked to enter information that will be incorporated3. into your certificate request.4. What you are about to enter is what is called a Distinguished Name or a DN.5. There are quite a few fields but you can leave some blank6. For some fields there will be a default value,7. If you enter '.', the field will be left blank.8. -----9. Country Name (2 letter code) [AU]:CN10. State or Province Name (full name) [Some-State]:Zhejiang11. Locality Name (eg, city) []:Hangzhou12. Organization Name (eg, company) [Internet Widgits Pty Ltd]:My CA13. Organizational Unit Name (eg, section) []:14. Common Name (e.g. server FQDN or YOUR name) []:localhost15. Email Address []:注意,这⾥的Organization Name (eg, company) [Internet Widgits Pty Ltd]:后⾯⽣成客户端和服务器端证书的时候也需要填写,不要写成⼀样的可以随意写如:My CA, My Server, My Client。
HTTPS原理HTTPS的安全性测试与评估
HTTPS原理HTTPS的安全性测试与评估HTTPS原理HTTPS,全称为Hyper Text Transfer Protocol Secure,即超文本传输安全协议。
它是一种通过计算机网络进行安全通信的协议。
HTTPS在传输层使用了SSL/TLS协议来加密通信内容,保证了传输过程中的数据安全性和完整性。
与HTTP相比,HTTPS在传输过程中使用了加密算法,能够有效防止中间人攻击和数据篡改。
本文将介绍HTTPS的工作原理以及对其安全性进行测试与评估。
1. HTTPS的工作原理HTTPS的工作原理可分为以下几个步骤:1.1 客户端发起HTTPS请求当客户端(例如浏览器)发起一个HTTPS请求时,它向服务器发送一个连接请求,请求建立安全连接。
默认使用的端口号为443。
1.2 服务器发送数字证书服务器收到客户端的连接请求后,会将服务器的数字证书发送给客户端。
数字证书包含了服务器的公钥及相关证书信息。
1.3 客户端验证数字证书客户端收到服务器发送的数字证书后,会对其进行验证。
验证包括检查证书的合法性、验证证书颁发机构等。
同时,客户端还会生成一个用于加密通信的临时密钥。
1.4 客户端与服务器建立安全连接客户端使用服务器的公钥加密临时密钥,并发送给服务器。
服务器收到客户端加密的临时密钥后,使用私钥(只有服务器拥有)解密临时密钥。
1.5 客户端与服务器进行密钥协商客户端和服务器使用加密后的临时密钥进行通信密钥的协商,生成一个对称密钥。
这个对称密钥将被用于后续的加密和解密操作。
1.6 客户端与服务器进行加密通信客户端和服务器使用协商得到的对称密钥进行加密通信。
这样,客户端发送的数据和服务器返回的数据都会进行加密处理,保证了传输过程中的数据安全性。
2. HTTPS的安全性测试与评估为了保障网站使用HTTPS协议的安全性,有必要进行安全性测试与评估。
2.1 SSL证书验证在安全性测试中,首先需要验证SSL证书的合法性。
接口测试方法论
接口测试方法论一、概述接口测试是软件测试中的一个重要环节,它主要是用来验证不同系统之间的数据传输是否正常,以及系统之间的交互是否符合预期。
在进行接口测试时,需要考虑到接口的稳定性、可靠性和安全性等因素,以确保系统能够正常运行。
二、接口测试的分类1.按照协议分类(1)Web服务接口测试:主要用于验证Web服务是否能够正常通信和处理请求。
(2)HTTP/HTTPS接口测试:主要用于验证HTTP/HTTPS协议下的数据传输是否正常。
(3)TCP/IP接口测试:主要用于验证TCP/IP协议下的数据传输是否正常。
2.按照应用场景分类(1)内部应用程序接口测试:主要针对企业内部使用的应用程序进行测试。
(2)外部应用程序接口测试:主要针对面向公众开放的应用程序进行测试。
3.按照功能分类(1)基本功能测试:主要验证系统基本功能是否正常。
(2)性能测试:主要验证系统在高负载下能否保持稳定。
(3)安全性测试:主要验证系统在面临攻击时能否保证数据安全。
三、接口测试流程1.需求分析阶段:根据需求文档和设计文档,确定接口测试的范围和测试计划。
2.测试用例设计阶段:根据需求文档和设计文档,编写测试用例,并对测试用例进行评审和修改。
3.环境搭建阶段:根据测试用例的要求,搭建相应的测试环境,并进行配置和调试。
4.接口测试执行阶段:按照测试用例执行接口测试,并记录相关数据和问题。
5.问题跟踪与修复阶段:对于发现的问题进行跟踪,并及时通知开发人员进行修复。
6.回归测试阶段:在开发人员修复问题后,对相关功能进行回归测试,以确保问题已经得到解决。
四、接口测试工具1.Postman:一款常用的HTTP客户端工具,可以方便地发送HTTP 请求并查看响应结果。
2.Fiddler:一款常用的Web调试工具,可以监控HTTP/HTTPS请求并查看响应结果。
3.JMeter:一款功能强大的性能测试工具,支持多种协议,包括HTTP、FTP、JDBC等。
HTTPS的测试
基于安全协议的https的页面测试脚本一、loadrunner8.1HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。
它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
在使用https协议不管是服务器端还是客户端都需要使用到ca证书来进行访问。
一般来说,性能测试为所常见的为客户端使用https打开页面的方式。
在这个情况下,首先是处理https访问过程中的证书1.证书的准备常见的证书为:*.pfx,*.p12格式,该种格式的证书可以通过双击运行安装到IE浏览器上。
用户在访问的时候就可以使用到。
但这些证书并不是LoadRunner所使用的类型,因此需要对其进行转换。
将其转换为*.pem 格式。
转换方法如下:●安装openssl后●运行C:\<OpenSSL>/bin文件夹的openssl二进制文件,它将启动OpenSSL命令提示符●执行以下命令:pkcs12 -in c:\test1.pfx -out c:\test01.pem –nodes●或者直接在cmd下面执行:openssl pkcs12 -in c:\test1.pfx -out c:\test01.pem –nodes●执行后,将会在指定目录生成test01.pem文件,这个文件将会在下一个步骤,对LoadRunner进行配置的时候使用到。
2.LR配置启动LoadRunner,打开Recording Option选项。
选择后,单击New Enty红框中的配置为服务器的ip(或者域名)和端口号(ssl默认端口443),按照测试所需要的实际地址进行配置。
配置后,将Use specified client-side certificate[Base64/PEM]钩选,为使用客户端证书访问。
HTTPS的使用方法及步骤详解
HTTPS的使用方法及步骤详解随着互联网的发展,网络安全问题变得越来越重要。
为了保护用户的隐私和数据安全,许多网站采用了HTTPS协议。
本文将为大家介绍HTTPS的使用方法及步骤,帮助读者更好地理解和应用这一安全协议。
1.什么是HTTPS?HTTPS(Hypertext Transfer Protocol Secure)是一种加密的通信协议,它基于HTTP协议,在传输层使用SSL/TLS进行加密。
通过使用HTTPS协议,可以保证通信过程中的机密性、完整性和身份认证。
2.HTTPS的优势与传统的HTTP相比,HTTPS具有以下明显的优势:2.1数据加密:HTTPS在传输过程中使用SSL/TLS对数据进行加密,防止数据被窃取或篡改。
2.2身份认证:HTTPS使用数字证书验证服务器的身份,确保用户连接到正当的网站并防止中间人攻击。
2.3 SEO优化:搜索引擎倾向于显示HTTPS网站的搜索结果,因此使用HTTPS可以提升网站的排名和可信度。
2.4用户信任:HTTPS表示网站对用户数据保护的承诺,使用户更愿意与网站进行交互和共享信息。
3.配置HTTPS的步骤下面是配置HTTPS的一般步骤,具体操作可能因不同的服务器和证书机构而有所差异:3.1选择SSL/TLS证书为了使用HTTPS协议,首先需要从受信任的证书机构(CA)获取SSL/TLS证书。
这些证书通常分为三种类型:单域名证书、通配符证书和多域名证书。
根据自身需求,选择适合的证书类型,并购买相应的证书。
3.2配置服务器为了支持HTTPS,服务器需要进行相应的配置。
这包括生成私钥(Private Key)、生成证书签发请求(CSR)以及在服务器上启用SSL/TLS功能。
3.3申请证书根据服务器生成的CSR,向选定的证书机构提交证书签发请求。
证书机构将对您的身份进行验证,并签发与您的CSR相关联的证书。
3.4安装证书一旦收到证书,您需要将其安装到服务器上。
使用burpsuite抓取APP上http和https请求的配置方法
1、使用burpsuite渗透测试工具,拦截安卓和IOS客户端软件的HTTP消息
在安卓或者ios设备上当前已连接wifi的高级选项,设置在burpsuite中设置的PC的IP 地址和端口号,设置完成后,可以开始拦截请求。
2、使用burpsuite渗透测试工具,拦截android和IOS客户端软件的https消息
a)导出Burp Suite根证书
浏览器设置好代理后,访问http://burp/
下载一下burp suite证书,这里是der格式的,我们要crt的,使用火狐浏览器转,导入并导出下就可以了。
已经转换好的证书可以直接使用进行安装:
PortSwiggerCA.c
rt
b)在手机中添加信任证书
将导出的证书PortSwiggerCA.crt上传到手机安装。
(备注:证书传到手机上后不能直接安装,需要从设备存储空间安装证书)
安装完成以后,在信任的证书里面可以查看到刚才安装的证书
在安卓或者ios设备上当前已连接wifi的高级选项,设置在burpsuite中设置的PC的IP 地址和端口号,设置完成后,可以开始拦截https请求。
建立https实验过程
https网站的建立和原理
首先在正常情况下,即:服务器端在http下建立一个简单的网页,测试客户机能否访问。
以下是服务器做的事情。
一、打开c:\windows\ 注意:一般情况下,网站的文件默认就在这个目录。
二、打开记事本,输入:“实验网站,欢迎光临!”,保存到C:\Inetpub\wwwroot 目录中,并改名为:defaulet.htm,因为这个是windows网站默认的首页。
三、IIS设置:
四、客户端输入:http://服务器端的IP地址,正常情况下可以看到这个网页的内容。
截图:
上面的实验说明我们已经在http方式下建好了网站,因为我们可以正常访问。
https网站也要在http网站的基础上,完成上面的过程,我们就可以开始书上251的内容了:。
postman进行https接口测试所遇到的ssl证书问题,参考别人方法
postman进⾏https接⼝测试所遇到的ssl证书问题,参考别⼈⽅
法
参考⽂档:
随着 https 的推动,更多当然是为了让软件项⽬有更多安全保障,整个 web 的通信都使⽤了 ssl 证书。
在使⽤ postman 进⾏接⼝测试时,就必须解决 ssl 的环境问题。
⽅法尝试⼀: openssl ⽣成⾃有证书
找了很多⽹络资料,利⽤ openssl ⽣成公私钥,pkcs12等⽂件……
结果发现是⼈云亦云⼀⼤⽚,复制抄袭满天飞。
此路,⾄少我多次尝试导⼊到 postman 并没调通。
最快速最靠谱的⽅法↓
考虑到抓包⼯具如 fiddler、Charles,在嗅探 https 时⾃有证书,那么⽤这个证书理论上是可以秒解的。
以 Charles 的使⽤举例
1. 打开 Charles,将 Charles root certificate 根证书保存,格式选择为.pem,并导出 private key ⽂件。
(⼊⼝见下图)
2. 打开 postman,进⼊系统设置 settings,在 general 中关闭 ssl 检查,再进⼊ certificates 进⾏配置
OK,两步就⾏。
接着测试确认(此时报⽂即可正确解析)
配置成功后的 demo。
接口测试的要求
接口测试的要求接口测试是软件测试的重要环节,主要针对应用程序的接口进行功能和性能的验证,以确保接口能够正确地处理请求并返回正确的结果。
在进行接口测试时,需要考虑以下几个方面:1. 接口协议:确认接口使用的通信协议(如HTTP、HTTPS、TCP、UDP 等)以及接口的版本和规范,确保测试时遵循正确的协议规定。
2. 输入验证:验证接口能够正确处理各种输入情况,包括有效输入、边界值输入和非法输入。
测试时需要模拟各种输入数据,并对接口的输入参数进行验证。
3. 接口参数:测试接口的参数传递和处理,包括参数的顺序、类型、名称和默认值等。
确保接口参数的正确性和一致性,以及参数的合法性和安全性。
4. 接口逻辑:验证接口的内部逻辑和处理流程是否符合设计要求,包括对请求的处理、对数据的处理和返回结果的检查等。
5. 异常处理:测试接口在异常情况下(如网络中断、超时、参数错误等)的处理能力,确保接口能够正确地处理异常情况并返回合适的错误信息。
6. 安全性测试:测试接口的安全性,包括身份验证、授权、加密和防护等方面。
确保接口能够防止未授权的访问、防止SQL注入、XSS攻击等安全问题。
7. 性能测试:测试接口的性能表现,包括响应时间、吞吐量、负载能力等。
通过模拟大量请求和并发用户,对接口进行压力测试和性能评估。
8. 文档和规范验证:测试接口的文档和规范是否准确、完整和易于理解。
确保测试人员能够根据文档和规范正确地理解和测试接口。
9. 日志和监控:验证接口的日志和监控机制是否正常工作,确保接口的运行状态和异常情况能够被及时记录和监控。
在进行接口测试时,需要编写相应的测试用例,制定详细的测试计划和方案,并使用合适的测试工具和技术进行测试。
同时,需要与开发团队密切合作,及时反馈问题并跟踪修复情况,以确保接口的质量和稳定性。
DNS_TCP_UDP_HTTPS测试案例
DNS协议案例一、DNS协议解析1.1.DNS支持TCP和UDP协议差异特性TCP UDP连接性三次握手不需要建立连接可靠性可靠,丢包会自动重传不可靠有序性会对传输乱序的消息重新排列可能乱序传输速度慢,因为要建立连接并保证可靠和有序快传输及控制通过字节流传输,无界,有拥塞控制机制(慢开始、拥塞避免、快重传、快恢复)数据包都是单独的,有界,不作拥塞控制资源消耗需要更多资源以传递更多信息,包头比较大(需要20字节)头部只需8个字节1.2DNS over HTTPS优缺点优点:(1)DNS的解析请求和解析结果经由中间路由时都不可被解密,做到了用户端和解析服务器之间端到端的加密,做到隐私不在中间泄露(2)双向请求和结果数据因为加密算法的存在保证不可被篡改,阻止了借用DNS 的钓鱼攻击和拒绝服务攻击(3)无法通过判定用户访问域名的行为来触发防火墙规则,很大程度上保障上网体验和联通性缺点:(1)可信递归解析服务器都是公开可获取的,ISP可以屏蔽这些IP地址而让用户转行到其它的镜像服务器,毕竟现在的客户端浏览器升级过程缓慢,在无法使用新DoH解析服务器时还是应该退回到老协议的(2)当用户获得解析记录后还是要与目标服务器进行通讯,这个通讯就算使用https传输,目前的TLS1.2协议依旧会泄露服务器域信息(SNI),新的TLS1.3协议草案要让DoH服务器发回解析记录的同时一并发回目标服务器的公钥,这样就可以直接与服务器握手时就使用加密后的SNI,这个对DNS服务的改动非常大而且很大程度上加重了DNS服务器的负担。
1.3DNS协议介绍域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。
它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS使用UDP端口53。
当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
域名可将一个IP地址关联到一组有意义的字符上去。
基于SSL_Robot的HTTPS页面自动化测试研究
对于上述问题 , 内外相关研究较少 。目前存在的两种解 国
制 rfe i MD插 件 , 们仅能 部分地 实现 它 节, 是保证 We 应用程序质量的有效 手段 b 。We 应 用程序测 决方 式 : 定 po l和 安装 R b ee u n TP S弹 试的 目标是尽可能地模拟 现实用户环境 以准确地测 定 We 应 S l im对 H T S页面的测试 。本文 通过对 S L 出框的研 b
试, 并给 出了具体 实现技术 。将 S L R b t S o o部署到 具体 的 Sln m测试 实验 中, eei u 结果表 明, S o o 可以很好地 实现 S L R bt
Sl im对 H T S页面 的 自动 化 测 试 . ee u n TP 、 关键 词 :S L R b t S oo ;HT P ;S l i ; 自动 化 测 试 T S e nu e m
K e r s SS Ro o ;HTTP y wo d : L bt S;See i m ; a t ma i ts i g lnu u o t e tn c
_
0 引言
We 应 用程序测试是 We 应 用开发过程 中的一个 重要环 b b
对 H T S页面 的 自动 化 测 试 。 TP
处警 的工作流程 , 为平安城市建 设提供先进的科技 手段 , 产生
( I 报警联动) 同G S 管理模块组成 , 通过 G S系统提供 的接 u, I 实 明显的社会效 益 。相信在不 久的将来国 内的一些 大 中型城市 现公交车站位置 的标注 , 并根据公 交车基础信息库实现公交车 将 陆续 开展 公交网络监控报警 系统的建设 , 本研 究具有一定的
Aut m a i si Re e r h f H TTPS o tc Te tng s a c o Pa e Ba e OU g s sd SSL Ro t bo
HTTPS国密算法认证配置
Supernova测试仪HTTPS国密认证配置网测科技2021-01-19目录1.文档说明 (3)2.配置SSL证书套件 (4)2.1上传证书文件 (4)3.用例配置及运行 (5)3.1 HTTPS国密不认证 (5)3.1.1新建用例 (5)3.1.2运行界面 (7)3.1.3查看报文 (7)3.2 HTTPS国密单向认证 (8)3.2.1新建用例 (8)3.2.2运行界面 (10)3.2.3查看报文 (10)3.2.4认证失败 (11)3.3 HTTPS双向认证 (12)3.3.1新建用例 (12)3.3.2运行界面 (14)3.3.3查看报文 (14)3.3.4认证失败 (15)1.文档说明本文档主要介绍HTTPS国密算法认证配置和测试过程。
本产品实现的是国密的SM3摘要算法,认证方式默认不认证,支持单向认证和双向认证。
随着需求的不断改变,可能会对用例配置进行修改和升级,从而改变配置过程,所以有任何问题,请联系我们的售前或售后支持人员。
2.配置SSL证书套件国密证书套件配置,用于支持各种HTTPS用例的运行和运行期间的证书认证。
各个证书文件之间的所属关系为:客户端证书文件、服务器证书文件,均由CA证书文件所签发。
系统有一个默认国密证书套件,可以使用证书生成工具制作一套证书上传至系统。
系统要求证书文件的扩展名必须为:[.cer],编码格式必须为PEM编码,私钥文件的扩展名必须为:[.key],编码格式必须为PEM编码。
2.1上传证书文件1)打开Supernova测试仪的Web界面,输入账号登录。
2)对象->SSL证书套件,点击“增加”,创建一个新的SSL证书套件,SSL 证书套件类型选择国密。
3)选择相应的证书文件上传系统,保存。
3.用例配置及运行3.1 HTTPS国密不认证HTTPS国密认证方式为“不认证”时,用例配置只需要服务器证书配置。
3.1.1新建用例1)通过web登录测试仪,依次点击用例 -> 网关设备测试 -> HTTPS -> 新建,单击增加,在弹出的选择用例选项中,编辑用例网络选项,根据需要修改配置参数,然后点击确定,进入用例配置页面。
用curl访问HTTPS站点并登录(对HTTP返回的结果特别清楚)
⽤curl访问HTTPS站点并登录(对HTTP返回的结果特别清楚)开发⽹站,少不了测试。
现在的⽹站为了加强安全性,都启⽤了HTTPS协议。
所谓HTTPS,也就是HTTP⽂本在SSL协议中传输。
⽤curl命令⾏来测试HTTPS站点是个很有⽤的功能,写点脚本,就可以做功能测试。
假定Ubuntu系统运⾏着⼀个HTTPS站点,⽤CppCMS编写,Nginx配置了SSL证书,通过FastCGI和CppCMS编写的后台进程连接在⼀起。
第⼀步,安装:[plain]1. apt-get install curl我的Ubuntu是13.04, 因此安装的curl版本很新,下⾯的命令检查版本号和其他信息:[plain]1. curl -V2. curl 7.29.0 (x86_64-pc-linux-gnu) libcurl/7.29.0 OpenSSL/1.0.1c zlib/1.2.7 libidn/1.25 librtmp/2.33. Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp4. Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP我们可以看到启⽤了SSL, 并且openssl版本是1.0.1c。
第⼆步,访问HTTP站点:[plain]1. curl 2. <!DOCTYPE html><!--STATUS OK--><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><title>百度⼀下,你就知道<unction(){var _t=new Date().getTime();document.cookie = "WWW_ST=" + _t +";expires=" + new Date(_t + 10000).toGMTString()})}catch(e){} </script></html><!--b5d54ba904675fbf-->返回了百度的⽹页内容。
Java实现HTTPHTTPS请求绕过证书检测
Java实现HTTPHTTPS请求绕过证书检测java实现 HTTP/HTTPS请求绕过证书检测⼀、Java实现免证书访问Https请求创建证书管理器类import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import .ssl.X509TrustManager;/*** 证书信任管理器(⽤于https请求)**/public class MyX509TrustManager implements X509TrustManager {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}public X509Certificate[] getAcceptedIssuers() {return null;}}服务器主机名校验类import .ssl.HostnameVerifier;import .ssl.SSLSession;public class NullHostNameVerifier implements HostnameVerifier{@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}}调⽤测试import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import .URL;import .ssl.HttpsURLConnection;import .ssl.SSLContext;import .ssl.SSLSocketFactory;import .ssl.TrustManager;import .goevent.weixin.util.MyX509TrustManager;public class HttpsTest {public static void main(String[] args) throws Exception {//设置可通过ip地址访问https请求HttpsURLConnection.setDefaultHostnameVerifier(new NullHostNameVerifier());TrustManager[] tm = {new MyX509TrustManager()};SSLContext sslContext = SSLContext.getInstance("TLS");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();String urlStr = "https://192.168.1.10/login_queryLkBySfmc.htm";URL url = new URL(urlStr);HttpsURLConnection con = (HttpsURLConnection) url.openConnection();con.setSSLSocketFactory(ssf);con.setRequestMethod("POST"); // 设置以POST⽅式提交数据con.setDoInput(true); // 打开输⼊流,以便从服务器获取数据con.setDoOutput(true);// 打开输出流,以便向服务器提交数据//设置发送参数String param = "sfmc=测试";PrintWriter out = new PrintWriter(new OutputStreamWriter(con.getOutputStream(),"UTF-8"));out.print(param);out.flush();out.close();//读取请求返回值InputStreamReader in = new InputStreamReader(con.getInputStream(),"UTF-8");BufferedReader bfreader = new BufferedReader(in);String result = "";String line = "";while ((line = bfreader.readLine()) != null) {result += line;}System.out.println("result:"+result);}}⼆、java实现 HTTP/HTTPS请求绕过证书检测代码实现使⽤Apache的HttpClient发送GET和POST请求1.使⽤帮助类HttpClients创建CloseableHttpClient对象.2.基于要发送的HTTP请求类型创建HttpGet或者HttpPost实例.3.使⽤addHeader⽅法添加请求头部,诸如User-Agent, Accept-Encoding等参数.4.对于POST请求,创建NameValuePair列表,并添加所有的表单参数.然后把它填充进HttpPost实体.5.通过执⾏此HttpGet或者HttpPost请求获取CloseableHttpResponse实例6.从此CloseableHttpResponse实例中获取状态码,错误信息,以及响应页⾯等等.7.最后关闭HttpClient资源.POST请求封装的⼯具类import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import ng.reflect.Method;import .URLDecoder;import .URLEncoder;import java.security.KeyManagementException;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;import mons.httpclient.util.TimeoutController;import ValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.apache.log4j.Logger;import cn.qtone.hjy.service.bean.yd.sync.AccountPasswordInfoSyncItem;import cn.qtone.hjy.service.bean.yd.sync.OrderInfoSyncItem;import cn.qtone.hjy.service.bean.yd.sync.YdOrderRelationshipInfoSyncItem;import cn.qtone.hjy.service.core.DES;import cn.qtone.hjy.service.dao.YdEduDao;import cn.qtone.util.SpringUtil;import com.alibaba.fastjson.JSONObject;import .ssl.SSLContext;import .ssl.TrustManager;import .ssl.X509TrustManager;public class HttpClientUtil {static Logger log = Logger.getLogger(HttpClientUtil.class) ;private static RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(10000).build();//设置请求和传输超时时间 private static CloseableHttpClient httpclient = HttpClients.createDefault();public static String send(String httpUrl, String message) throws IOException {String result = null ;HttpPost httpPost = new HttpPost(httpUrl);//设置数据读取超时5s 传输超时5s 链接请求超时5sRequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).setConnectionRequestTimeout(5000).build();httpPost.setConfig(requestConfig) ;message = URLEncoder.encode(message, "UTF-8") ;StringEntity entity = new StringEntity(message);httpPost.setEntity(entity);CloseableHttpResponse response = httpclient.execute(httpPost);BufferedReader in = null ;try {InputStream content = response.getEntity().getContent() ;in = new BufferedReader(new InputStreamReader(content));StringBuilder sb = new StringBuilder();String line = "" ;while ((line = in.readLine()) != null) {sb.append(line);}result = sb.toString() ;System.out.println("接收原始报⽂:" + URLDecoder.decode(result, "UTF-8")) ;} finally {EntityUtils.consume(response.getEntity());response.close();}return result ;}public static String post(String httpUrl, String message) throws Exception {String result = null ;CloseableHttpClient httpclient = HttpClients.createDefault();BufferedReader in = null ;HttpPost httpPost = new HttpPost(httpUrl);httpPost.setConfig(requestConfig);List <NameValuePair> nvps = new ArrayList <NameValuePair>();nvps.add(new BasicNameValuePair("tokenId", DES.encrypt(message)));httpPost.setEntity(new UrlEncodedFormEntity(nvps));try {System.out.println("发送报⽂:" + message);System.out.println("发送报⽂:" + DES.encrypt(message)) ;CloseableHttpResponse response = httpclient.execute(httpPost);InputStream content = response.getEntity().getContent() ;in = new BufferedReader(new InputStreamReader(content, "UTF-8"));StringBuilder sb = new StringBuilder();String line = "" ;while ((line = in.readLine()) != null) {sb.append(line);}System.out.println("响应报⽂:" + sb.toString()) ;//result = URLDecoder.decode(sb.toString(), "UTF-8") ;//result = DES.decrypt(result) ;//System.out.println("完成:" + JSONObject.parseObject(result) + "\n");return result ;} catch (Exception e) {e.printStackTrace() ;} finally {httpclient.close();}return null ;}/*** 发起post请求,请求参数以Map集合形式传⼊,封装到List <NameValuePair> 发起post请求* @param httpUrl* @param params* @return* @throws Exception*/public static String post(String httpUrl, Map<String, String> params) throws Exception {String result = null ;CloseableHttpClient httpclient = createSSLClientDefault();//httpclient.//httpclient.BufferedReader in = null ;HttpPost httpPost = new HttpPost(httpUrl);httpPost.setConfig(requestConfig);List <NameValuePair> nvps = new ArrayList <NameValuePair>();StringBuffer paramsBuf = new StringBuffer() ;for(Entry<String, String> e : params.entrySet()) {nvps.add(new BasicNameValuePair(e.getKey(), e.getValue()));paramsBuf.append("&").append(e.getKey()).append("=").append(e.getValue()) ;}httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));try {// 报⽂参数27:&id=jn-3-767744&groupPlatProTerminalId=119667&extend=uwJZ8j3CkpGPL4rM5J6KJhjR99O7yAe3BAGLS8ooI8ijNqKHfzTaK6W9wQvjZEVOmWJ3HxFb2O9D// wDbe3++UiQ==&xxtCode=370000&terminalType=1&role=3&type=3System.out.println("post请求报⽂地址:" + httpUrl+"?"+paramsBuf.toString()) ;CloseableHttpResponse response = httpclient.execute(httpPost);InputStream content = response.getEntity().getContent() ;in = new BufferedReader(new InputStreamReader(content, "UTF-8"));// in = new BufferedReader(new InputStreamReader(content, "GBK"));// in = new BufferedReader(new InputStreamReader(content));StringBuilder sb = new StringBuilder();String line = "" ;while ((line = in.readLine()) != null) {sb.append(line);}result = sb.toString() ;System.out.println("响应报⽂:" + result) ;// 响应报⽂:{"ret":0,"msg":"成功","callbackurl":"https:///test-sso/login?service=http%3A%2F%2F112.35.7.169%3A9010%2Feducloud%2Flogin%2Flogin%3Ftype%3D3%26mode%3D1%26groupId%3D4000573%26province //记录报⽂⽇志YdEduDao dao = SpringUtil.getBean(YdEduDao.class);dao.saveCallLog(httpUrl, paramsBuf.toString(), result); // HJY_SERVICE_LOGreturn result ;} catch (Exception e) {e.printStackTrace() ;} finally {httpclient.close();}return null ;}public static JSONObject postData(String httpUrl, Object obj) throws Exception {JSONObject json = null;try{String result = post(httpUrl,obj);json = JSONObject.parseObject(result);}catch(TimeoutException e){System.out.println("请求超时了:"+httpUrl);throw e;}finally {return json ;}}public static String post(String httpUrl, Object obj) throws Exception {Map<String, String> params = getParamData(obj);String result = null ;try {result = post(httpUrl,params);return result ;} catch (Exception e) {e.printStackTrace() ;} finally {httpclient.close();}return null ;}private static Map<String, String> getParamData(Object obj) {Class cla = obj.getClass();Map<String, String> map = new HashMap<String, String>();Method[] methods = cla.getDeclaredMethods();try {for (Method m : methods) {String mname = m.getName();if (mname.startsWith("get")) {String name = mname.substring(3, mname.length());// 截取字段name = name.substring(0, 1).toLowerCase()+ name.substring(1, name.length());// 把⾸字母变⼩写String value = m.invoke(obj)==null?"":m.invoke(obj).toString();if(cla.equals(YdOrderRelationshipInfoSyncItem.class)&&name.equals("unionId")&&(value==null||value.equals(""))){continue;}map.put(name,value);// 取值}}Class superclass = cla.getSuperclass();while (!superclass.equals(Object.class)) {Method[] superclassmethods = superclass.getDeclaredMethods();for (Method m : superclassmethods) {String mname = m.getName();if (mname.startsWith("get")) {String name = mname.substring(3, mname.length());// 截取字段name = name.substring(0, 1).toLowerCase()+ name.substring(1, name.length());// 把⾸字母变⼩写String value = m.invoke(obj)==null?"":m.invoke(obj).toString();if((cla.equals(OrderInfoSyncItem.class)||cla.equals(AccountPasswordInfoSyncItem.class)||cla.equals(YdOrderRelationshipInfoSyncItem.class))&&name.equals("operation"))continue;map.put(name,value);// 取值}}superclass = superclass.getSuperclass();}} catch (Exception e) {e.printStackTrace();}return map;}public static CloseableHttpClient createSSLClientDefault(){try {//SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 在JSSE中,证书信任管理器类就是实现了接⼝X509TrustManager的类。
接口测试的要点
接口测试的要点接口测试是软件测试中的一个重要方面,主要用于验证系统不同组件之间的通信和数据传递是否正常。
以下是进行接口测试时需要关注的一些重要要点:1.输入验证:确保接口能够正确验证和处理各种输入情况,包括边界条件、非法输入、空值等。
输入验证是防范潜在安全威胁和错误的重要步骤。
2.请求和响应验证:检查接口的请求和响应是否符合规范。
包括验证请求的格式、参数是否正确,以及确保响应包含了正确的数据和状态码。
3.数据一致性:验证接口在数据传递过程中是否能够保持数据的一致性。
确保从一个系统到另一个系统的数据传递是准确且完整的。
4.性能和负载测试:针对接口进行性能测试,确保在高负载时接口仍然能够正常工作。
测试接口的响应时间、吞吐量和并发性。
5.安全性:检查接口的安全性,确保它能够防范潜在的安全威胁,如SQL 注入、跨站脚本攻击等。
使用安全协议(如HTTPS)加密敏感信息传输。
6.错误处理:测试接口在面对异常情况时的表现,包括错误处理、错误消息的准确性和友好性。
确保系统能够适当地处理异常情况而不崩溃或泄露敏感信息。
7.协议兼容性:针对不同的协议进行测试,例如RESTful、SOAP等。
确保接口符合相应的协议标准,能够与其他系统正确通信。
8.版本兼容性:如果系统有多个版本,确保接口在不同版本之间的兼容性。
新版本的系统应该能够与旧版本的接口兼容,并且不会破坏现有的功能。
9.日志和监控:验证接口是否能够生成适当的日志信息,以便在出现问题时进行故障排除。
设置监控机制,实时监测接口的状态和性能。
10.回归测试:随着系统的演进,对接口进行回归测试,确保修改或新增功能不会破坏已有的接口功能。
11.文档验证:检查接口文档的准确性和完整性,确保开发人员和测试人员都理解接口的使用方式和预期行为。
综合考虑这些要点,可以确保接口在各种情况下都能够正常工作,提高系统的整体质量和稳定性。
jmeter进行https协议的测试
jmeter进⾏https协议的测试
⼀、HTTPS和HTTP的区别
超⽂本传输协议HTTP协议被⽤于在Web浏览器和⽹站服务器之间传递信息。
HTTP协议以明⽂⽅式发送内容,不提供任何⽅式的数据加密,如果攻击者截取了Web浏览器和⽹站服务器之间的传输报⽂,就可以直接读懂其中的信息,因此HTTP协议不适合传输⼀些敏感信息,⽐如信⽤卡号、密码等。
为了解决HTTP协议的这⼀缺陷,需要使⽤另⼀种协议:安全套接字层超⽂本传输协议HTTPS。
为了数据传输的安全,HTTPS在HTTP的基础上加⼊了SSL协议,SSL依靠证书来验证服务器的⾝份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
1.https协议需要到ca申请证书,⼀般免费证书很少,需要交费。
2.http是超⽂本传输协议,信息是明⽂传输,https 则是具有安全性的ssl加密传输协议。
3.http和https使⽤的是完全不同的连接⽅式,⽤的端⼝也不⼀样,前者是80,后者是443。
4.http的连接很简单,是⽆状态的;HTTPS协议是由SSL+HTTP协议构建的可进⾏加密传输、⾝份认证的⽹络,⽐http协议安全。
⼆、⽅法
1.安全连接—更多信息—查看证书—详细信息—导出证书
2.⽣成.cer后缀的⽂件
3.把导出的证书转换成.store格式的⽂件
输⼊密码-添加信任
4.在jmeter中端⼝号输⼊443,协议输⼊https
5.在ssl管理器中添加证书
6.运⾏。
Fiddler测试HTTPS方法
Fiddler测试HTTPS方法HTTPS是一种通过SSL/TLS协议加密传输数据的HTTP协议,用于保护通信过程中的数据安全。
在进行HTTPS测试时,我们需要做一些额外的配置才能使Fiddler能够正确地解析HTTPS流量。
首先,我们需要确保安装了Fiddler。
安装完成后,启动Fiddler并打开“Tools”菜单,选择“Options”。
在Options窗口中,选择“HTTPS”选项卡。
在这里,我们需要勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”两个选项。
勾选“Decrypt HTTPS traffic”将会生成一个Root证书,用于解密HTTPS流量。
然后,我们需要配置浏览器的代理设置,以便将HTTPS流量导向Fiddler。
在浏览器中打开代理设置,将代理服务器设置为“127.0.0.1”,端口设置为Fiddler默认的8888端口。
此时,Fiddler将会捕获到该HTTPS请求,并显示在Fiddler的界面上。
我们可以通过在Fiddler界面上查看请求和响应的详细信息来进行分析和调试。
在Fiddler的界面上,我们可以查看请求的URL、请求方法、请求头信息等。
同时,Fiddler还提供了一些其他功能,如重发请求、修改请求头信息等,帮助我们进行更深入的测试和分析。
除了分析请求和响应的详细信息外,Fiddler还可以进行性能分析和压力测试。
我们可以通过使用Fiddler的AutoResponder功能模拟不同的网络情况,查看系统在不同网络环境下的性能表现。
总结起来,使用Fiddler测试HTTPS方法需要进行一些配置,并通过Fiddler的界面来查看和分析请求和响应的详细信息。
Fiddler还提供了其他一些功能,如重发请求、修改请求头信息、性能分析和压力测试等,帮助我们进行更深入的测试和分析。
HTTPS安全评估工具
HTTPS安全评估工具
以下是一些常用的HTTPS安全评估工具:
1. SSL Labs:由Qualys开发的在线工具,用于评估服务器SSL配置的安全性。
2. OWASP ZAP:开源的Web应用程序安全评估工具,支持对HTTPS应用程序进行安全测试和评估。
3. Nessus:一款综合性的漏洞评估工具,可用于对HTTPS服务器进行安全扫描和评估。
4. Nikto:开源的Web服务器扫描工具,可以检查服务器的SSL配置和其他安全漏洞。
5. Nmap:开源的网络扫描工具,可以用于对网络上的HTTPS 服务器进行端口扫描和服务识别。
6. SSLyze:一款用于评估SSL配置安全性的命令行工具,可进行各种SSL协议和密码套件的分析和评估。
7. Burp Suite:一款综合性的Web应用程序安全测试工具,支持对HTTPS应用程序进行安全测试和评估。
请注意,使用任何安全评估工具之前,请确保您已获得合法的授权,并且仔细阅读和理解工具的使用说明。
Fiddler测试HTTPS方法
Fiddler测试HTTPS⽅法1、⽬的本⽂档的⽬的是提升开发及测试⼈员在⼿机端测试时环境的可⽤性,保证通过Fiddler做代理时不会出现配置问题。
2、环境请采⽤最新版本的Filddler,⽬前的版本为:Fiddler Web Debugger (v4.5.1.0)截图如下:图13、说明Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能⼿机发出的HTTP/HTTPS请求。
Fiddler能捕获IOS设备发出的请求,⽐如IPhone, IPad, MacBook. 等等苹果的设备。
同理,也可以截获Andriod,Windows Phone的等设备发出的HTTP/HTTPS。
前提条件是:安装Fiddler的机器,跟Iphone 在同⼀个⽹络⾥,否则IPhone 不能把HTTP发送到Fiddler的机器上来。
4、配置Fiddler打开Fiddler, Tools-> Fiddler Options。
(配置完后记得要重启Fiddler).选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求选中"Allow remote computers to connect". 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来获取Fiddler所在机器的IP地址5、IPhone上安装Fiddler证书这⼀步是为了让Fiddler能捕获HTTPS请求。
如果你只需要截获HTTP请求,可以忽略这⼀步:1. ⾸先要知道Fiddler所在的机器的IP地址:假如我安装了Fiddler的机器的IP地址是:192.168.1.1042. 打开IPhone的Safari, 访问http://192.168.1.104:8888,点"FiddlerRoot certificate" 然后安装证书第⼀步,点击FiddlerRoot certificate第⼆步,点击安装第三步,输⼊⼿机密码第四步,点击安装第五步,完成6、IPhone上配置Fiddler为代理打开IPhone, 找到你的⽹络连接,打开HTTP代理,输⼊Fiddler所在机器的IP 地址(⽐如:192.168.1.104) 以及Fiddler的端⼝号88887、注意事项只能捕获HTTP,⽽不能捕获HTTPS的解决办法有时候会发现,Fiddler 只能捕获IPhone发出得HTTP请求,⽽不能捕获HTTPS 请求,原因可能是证书没有安装好。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于安全协议的https的页面测试脚本一、loadrunner8.1HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。
它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
在使用https协议不管是服务器端还是客户端都需要使用到ca证书来进行访问。
一般来说,性能测试为所常见的为客户端使用https打开页面的方式。
在这个情况下,首先是处理https访问过程中的证书1.证书的准备常见的证书为:*.pfx,*.p12格式,该种格式的证书可以通过双击运行安装到IE浏览器上。
用户在访问的时候就可以使用到。
但这些证书并不是LoadRunner所使用的类型,因此需要对其进行转换。
将其转换为*.pem 格式。
转换方法如下:●安装openssl后●运行C:\<OpenSSL>/bin文件夹的openssl二进制文件,它将启动OpenSSL命令提示符●执行以下命令:pkcs12 -in c:\test1.pfx -out c:\test01.pem –nodes●或者直接在cmd下面执行:openssl pkcs12 -in c:\test1.pfx -out c:\test01.pem –nodes●执行后,将会在指定目录生成test01.pem文件,这个文件将会在下一个步骤,对LoadRunner进行配置的时候使用到。
2.LR配置启动LoadRunner,打开Recording Option选项。
选择后,单击New Enty红框中的配置为服务器的ip(或者域名)和端口号(ssl默认端口443),按照测试所需要的实际地址进行配置。
配置后,将Use specified client-side certificate[Base64/PEM]钩选,为使用客户端证书访问。
单击...选择刚刚转换生成的客户端证书。
如果你为证书有设置密码,在这里也需要输入。
到此为止所有与http区别的配置就完成了。
录制后,可以在脚本的开始,看到LoadRunner新生成的语句web_set_certificate_ex("CertFilePath=test01.pem","CertFormat=PEM","KeyFilePath=test01.pem","KeyFormat=PEM","Password=123456","CertIndex=1",LAST);下面的操作和普通的页面性能测试一样。
二、loadrunner111、证书的准备证书准备和loadrunner8.12、LR配置启动LoadRunner,打开Recording Option选项。
Capture level 选择winnet level data到此为止所有与http区别的配置就完成了。
录制后,可以在脚本的开始,看到LoadRunner新生成的语句web_set_certificate_ex("CertFilePath=WinINetCert1.pem", "CertFormat=PEM","KeyFilePath=WinINetCert1.pem","KeyFormat=PEM","Password=5326797a","CertIndex=1",LAST);将WinINetCert1.pem数字证书替换成你的客户端证书,并参数化将5326797a密码替换成你的客户端证书密码,并参数化打开run-time settings>preferences将winlnet replay instead of scokets(windows noly) 打勾(设置这一项则数字证书在浏览器中获取);如果参数化数字证书,则此项不用打勾。
下面的操作和普通的页面性能测试一样。
三、批量生成数字证书1、Jdk安装、Openssl安装和expect安装Jdk安装:略。
Openssl安装安装包:ActivePerl-5.16.3.1603-mswin32-x86Vcredist_x32.exeWin32OpenSSL-1_0_1e.exeexpect安装包:tcl-8.4.13-6.el5.x86_64.rpmexpect-5.42.1-1.x86_64.rpmexpect-devel-5.42.1-1.x86_64.rpmExpect安装命令:rpm -ivh tcl-8.4.13-6.el5.x86_64.rpm expect-5.42.1-1.x86_64.rpm expect-devel-5.42.1-1.x86_64.rpm2、带根证书的批量数字证书生成过程(1) 脚本准备A、根证书生成:CA.pl -newcaOpenssl pkcs12 -export clcerts -in demoCA\cacert.pem -inkey demoCA\private\cakey.pem -out cakey.p12B、生成以下脚本文件:Cacert.pem (根证书)Cakey.pem (根证书密钥)f (openssl配置文件)Makep12.shTest.expRun.sh脚本内容:Makep12.sh#!/bin/bashi=$1Sed -i “52 s/tester.*/tester${i}/” fOpenssl genrsa -out key/tester${i}.key 1024Openssl req -new -out csr/tester${i}.csr -key key/tester.${i}key -config fOpenssl x509 -req -in csr/tester${i}.csr -out cer/tester${i}.cer -CA cacert${i}.pem CAkey cakey${i}.pem -days 365 -set_serial ${i}Openssl pkcs12 -export -clcerts -in cer/tester${i}.cer -inkey key/tester${i}.key -out p12/tester${i}.p12 -nodesOpenssl pkcs12 -in p12/tester${i}.p12 -out pem/tester${i}.pem -nodesTest.exp#!/usr/bin/expectSet num [lindex $argv 0]Spawn ./makep12.sh $numExpect “pem:”Send “123456\r”Expect “Password:”Send “123456\r”Expect “Password:”Send “123456\r”Expect “Password:”Send “123456\r”Expect eofExitRun.sh#!/bin/bashFor ((i=1;i<=10000;i=$[$i+1]));do./test.exp $iDone(2) 脚本执行A、以root用户登录linux系统,在root目录下新建一个ca目录Mkdir caB、进入ca目录,新建5个目录Mkdir keyMkdir csrMkdir cerMkdir p12Mkdir pemC、将上一步生成的6个脚本文件用ftp工具上传到/root/ca目录下D、给脚本赋执行权限Chmod u+x run.sh test.exp makep12.shE、修改run.sh脚本,将序列号范围i=1;i<=10000 改为你想要生成的序列号范围F、运行run.sh脚本./run.sh3、不带根证书的批量数字证书生成过程keytool -genkey -v -alias myserver -dname "CN=localhost" -keyalg RSA -keypass 123456 -keystore server.ks -storepass 123456keytool -genkey -v -alias myclient -dname "CN=yerh" -keyalg RSA -keypass 123456 -keystore client.p12 -storepass 123456 -storetype PKCS12keytool -export -alias myclient -file client.cer -keystore client.p12 -storepass 123456 -storetype PKCS12keytool -import -v -alias myclient -file client.cer -keystore server.ks -storepass 123456openssl pkcs12 -in client.p12 -out client.pem -nodess四、测试过程中遇到的问题1、使用多个测试发生器时报The file .......WinINetCert1.pem which is part of script ...cannot be find解决办法:在控制器端的测试脚本目录下面添加文件WinINetCert1.pem。
2、使用多个测试发生器时报Error -27716:Certificate File (....\tester1.pem)not be find解决办法:将证书文件拷贝到测试发生器对应的目录下面。