校验失败什么意思?pos机校验WORKKEY错,请问怎么解决

校验失败什么意思?pos机校验WORKKEY错,请问怎么解决

本文目录

  • pos机校验WORKKEY错,请问怎么解决
  • HTTPS证书校验
  • Python要求扔了sslerror问题,怎么解决
  • 一、pos机校验WORKKEY错,请问怎么解决

    pos机效验workkey出错的意思是大多是POS与密码器之间串号不符,主要是在签到时出现这种情况。建议进入POS后台查看一下,不是不串号丢失等。如丢失,里面可有一项手动设置,手动导入串号密钥,再烂谨从新关肢历差机签到。还有什么不明白的可荀历皮头橡来了解

    二、HTTPS证书校验

    HTTP协议传输数据是明文传输,任意的人抓包就能看到传输的数据,这显然不安全。1994年,Netscape公司用加密协议增加了HTTP,开始在HTTP的基础上加入SSL(Secure Socket Layer)。称为”HTTP over SSL”或者”HTTP Secure”,也就是我们现在熟知的HTTPS。

    TLS(Transport Layer Security,传输层安全协议)是IETF制定的一种新的协议,TLS1.0是建立在SSL3.0协议规范之上,是SSL3.0协议的后续版本,可以理解为SSL3.1。

    SSL/TLS分为对称加密和非对称加密两种方式。

    对称加密是指加密和解密都用同一份密钥(只有一个KEY),常见的有:AES-128,AES-192,AES-256。

    非对称加密对应于一对密钥,称为私钥握段和公钥,用私钥加密后需要用公钥解密,用公钥加密后需要用私钥解密,常见的有:RSA、DSA/DSS。

    对称加密的优点是运算速度快,缺点是互联网环境下无法将密钥安全的传送给对方。非对称加密的优点是可以安全的将公钥传递给对方,但是运算速度慢。

    https先采用非对称加密传输协商对称加密的密钥,然后用对称加密通信。

    HTTPS的非对称和对称加解密过程:

    客户端通过发送Client Hello消息给服务器初始化Session连接,Client Hello消息包含以下字段:

    SSL/TLS版本号。version 2表示的是SSL 2.0,version 3表示的是SSL 3.0,version 3.1表示的是TLS 1.0。

    随机数Random_C。一共32个字节。前面4个字节是当前时间戳,后面28个字节是一个随机数。后面协商对称加密的Session Key会用到。

    Session ID。如果是之前已经存在的连接重连,那么Session ID会是一串数字,否则是None。

    Cipher Suite。支持的加密组件列表。例如TLS_RSA_WITH_DES_CBC_SHA, TLS是TLS协议版本,TLS表示TLS1.0,RSA是密钥交换算法,DES_CBC是加密算法,SHA是摘要算法。

    压缩算法。表示建议选用的是哪种压缩算法。

    Server Hello.服务器收到客户端的Client Hello消息会响应一个Server Hello消息,包括以下字段:

    SSL/TLS版本,客户端和服务器都支持的SSL/TLS最高版本。

    随机数Random_S,一共32个字节,前面4个字节是当前时间戳,后面28个字节是一个随机数。后面协商对称加密的Session Key会用到。

    Session ID,这里会有三种情况。1.产生一个新的Session ID,表示没有找到之前的Session ID或者之前没有这个Session ID。2.返回客户端带上的之前的Session ID。(断链重连)3.Null,服务器没有办法产生新的Session ID。

    Cipher Suite,服春晌务器从刚才Client Hello消息的Cipher Suite加密列表中选中的加密组件。

    压缩算法,表示选中的是哪种压缩算法。

    服务器发完Sever Hello后还会发送下面几条消息:

    Server Certificate.服务器段森誉发给客户端的证书,包含公钥。客户端后面会用该密钥加密premaster secret。客户端也会校验证书的合法性,比如证书包含的域名是否就是客户端正在访问的域名。

    Server Key Exchange.[可选]当服务器的证书不包含公钥时,客户端会用它来加密后面的Client Key Exchange消息。

    Client Certificate Request.[可选]用于服务器需要验证客户端身份的情况,例如银行系统通常用U盾来证明客户端的身份。

    Server Hello Done.表示Server已经发送消息完毕并且在登陆客户端回复。

    客户端紧接着响应给服务器的消息:

    Client Certificate.[可选]客户端证书,包括客户端的公钥。响应上面的Client Certificate Request。

    Client Key Exchange.该消息包括premaster secret,TLS的版本号,再次带上版本号是因为之前的版本号是明文传输的,攻击者可能会恶意修改为较低的版本号,从而降低连接的安全系数方便发起攻击。该消息字段会用公钥加密。现在一共有Random_C,Random_S, premaster secret三个随机数,客户端和服务器端会用相同的算法,用这三个随机数作为参数,从而计算得到另外的一个随机数,即后面对称加密的密钥Session Key。

    Certificate Verify.[可选]该消息只针对有Client Certificate的情况。会计算出该消息字段的HASH,然后用客户端的私钥加密该HASH作为签名。服务器端会使用Client Certificate消息中得到的客户端公钥解密并验证这条消息的合法性。

    Change Cipher Suite.该消息通知服务器接下来的Client Finish消息将会用刚才协商的密钥Session Key来加密。

    Client Finished.该消息会列举客户端上面用到的所有加密字段,并且算出他们的HASH值,然后用Session Key加密。

    服务器在握手阶段最后回应给客户端的消息:

    Change Cipher Suite Message.该消息通知客户端接下来的消息会用Session Key来加密。

    Sever Finished Message.对整个协商阶段用到的字段算一个HASH,然后用Session Key加密。

    在握手过程中,网站会向浏览器发送SSL证书,SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示。

    如上图所示,公钥内容的后面是会跟上一个数字签名,该数字签名是将公钥内容的HASH用私钥加密后的密文。客户端拿到公钥后,会用相同的HASH算法重新算一遍,得到一个HASH值hash1。然后用公钥解密数字签名得到HASH值hash2,如果hash1等于hash2就证明这个公钥是没有被中间人修改的。即使中间人修改了公钥的内容,他也没有私钥可以重新生成数字签名,用户拿到修改后的公钥一算发现HASH不对就会报错。

    对HTTPS最常见的攻击手段就是SSL证书欺骗或者叫SSL劫持,是一种典型的中间人攻击。不过SSL劫持并非只是用于攻击目的,在一些特殊情况下利用SSL劫持我们可以更顺畅的访问网络,我会在后文提到。

    以攻击为目的的SSL劫持如果不注意浏览器安全提示的话,很容易就中招。当网络中有中间人发起SSL劫持攻击时,攻击者需要伪造一个SSL证书发给浏览器,这个时候由于伪造的SSL证书不受信任,浏览器会给出提示。

    为了解决单个文件大,延迟性高等问题,迎来了新的解决方案Onlie Certificate Status Protocol(以下简称OCSP)。

    在RFC2560 X.509 Internet Public Key Infrastructure Online Certificate Status Protocol– OCSP的描述中,浏览器从在线OCSP服务器(也称为OCSP Response Server)请求证书的撤销状态,OCSP Server予以响应。这种方法避免CRL更新延迟问题。同样的,X.509 v3证书的OCSP信息也是存储在拓展信息中。

    浏览器在获得Web服务器的公钥证书后,开始验证公钥的合法性,这里会向该公钥的扩展信息中提供的OCSP Server地址发送OCSP Response,获得响应后,确认证书有效,再继续跟Web服务器通信。

    OCSP优点:相对于CRL方式,证书吊销后,CA Server可以立刻将吊销信息发送给浏览器,生效时间快。响应包内容短,不像CRL的响应包,都将近1M以上。

    浏览器的每次HTTPS请求创建,都需要连接CA OCSP Server进行验证,有的浏览器所在IP与CA OCSP Server的网络并不是通畅的。而且,OCSP的验证有网络IO,花费了很长的时间,严重影响了浏览器访问服务器的用户体验。

    在浏览器发送服务器HTTPS证书序号到CA OCSP Server时,也将暴露了用户的隐私,将用户访问的网址透漏给了CA OCSP Server。

    《你不在意的HTTPS证书吊销机制》( https://zhuanlan.zhihu.com/p/75475419)

    《HTTPS与SSL证书概要》( https://zhuanlan.zhihu.com/p/75475419)

    《HTTPS详解》( https://www.cnblogs.com/makelu/p/11140824.html)

    三、Python要求扔了sslerror问题,怎么解决

    我在使用requests访问某个https网站时出现错误

    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

    ——————————————————————————————————————————————————————————————————————————————————————

    Session对象在请求时允许你坚持一定的参数。此外,还坚持由Session实例的所有请求的cookie。

    s.get(‘httpsokie/123456789’)

    #‘{“cookies”:{“sessioncookie”:“123456789”}}’

    会话也可以用于提返侍供默认的数据漏和吵的请求的方法。这是通过提供的数据会话对象的属性:

    s.auth=(‘user’,‘pass’)

    s.headers.update({‘x-test’:‘true’})

    # both‘x-test’ and‘x-test2’ are sent

    s.get(‘ht, headers={’x-test2‘:’true‘})

    任何字典将被合并session级别的设置的值传递给请求方法。方法级别的参数覆盖会话参数。

    如果你想在一个session中删除一个参数,那么你只需要设置它为none,他便自动被删去。

    在一个session中的所有值都包含直接提供给你。参阅Session API文档了解更多信息。

    >>> r= requests.get(’hia.org/wiki/Monty_Python‘)

    {’content-length‘:’56170‘,’x-content-type-options‘:’nosniff‘,’x-cache‘:

    ’HIT from cp1006.eqiad.wmnet, MISS from cp1010.eqiad.wmnet‘,’content-encoding‘:

    ’gzip‘,’age‘:’3080‘,’content-language‘:’en‘,’vary‘:’Accept-Encoding,Cookie‘,

    ’server‘:’Apache‘,’last-modified‘:’Wed, 13 Jun 2012 01:33:50 GMT‘,

    ’connection‘:’close‘,’cache-control‘:’private, s-maxage=0, max-age=0,

    must-revalidate‘,’date‘:’Thu, 14 Jun 2012 12:59:39 GMT‘,’content-type‘:

    ’text/html; charset=UTF-8‘,’x-cache-lookup‘:’HIT fromcp1006.eqiad.wmnet:3128,

    MISS from cp1010.eqiad.wmnet:80‘}

    但是,如果我们想要得到我们的服务器发送的报头,我们只需访问请求,然后请求标头:

    >>> r.request.headers

    {’Accept-Encoding‘:’identity, deflate, compress, gzip‘,

    ’Accept‘:’/‘,’User-Agent‘:’python-requests/1.2.0‘}

    当你在API呼叫或会话呼叫收到一个Response对象,请求属性实际上是PreparedRequest使用。在某些情况下,发送请求之前,你不妨做一些额外的工作,身体或头(或任何其他真的)。这个简单的配方如下:

    from requests import Request, Session

    prepped= Request(’GET‘,# or any other method,’POST‘,’PUT‘, etc.

    # do something with prepped.body

    # do something with prepped.headers

    既然你没有做什么特别的请求对象,你准备立即修改的PreparedRequest的对象。然后,您可以发送您所要发送的请求的其他参数。或Sesssion中。

    请求可以验证SSL证书的HTTPS请求,就像一个网络浏览器。检查主机的SSL证书,您可以使用校验参数:

    >>> requests.get(’httpreitz.com‘, verify=True)

    requests.exceptions.SSLError: hostname’kennethreitz.com‘ doesn’t matcheither of‘*.herokuapp.com’,‘herokuapp.com’

    我没有对这个域的SSL设置,所以它的失败。好极了 Github上虽然没有:

    >>> requests.get(‘httpb.com’, verify=True)

    您也可以通过验证一个私人证书CA_BUNDLE文件的路径。您还可以设置环境变量的REQUESTS_CA_BUNDLE。

    如果你设置验证设置为False,也可以忽略验证SSL证书。

    >>> requests.get(‘httpethreitz.com’,cert=(‘/path/server.crt’,‘/path/key’))

    如果指定了错误的路径或无效的证书:

    >>> requests.get(‘htreitz.com’,cert=‘/wrong_path/server.pem’)

    SSLError: [Errno 336265225] _ssl.c:347: error:140B0009:SSLroutines:SSL_CTX_use_PrivateKey_file:PEM lib

    默认情况下,当你提出一个请求时,机体的反应是立即下载。您可以重写此行为,并推迟下载响应的身体,直到您访问Response.content,与流参数的属性:

    tarball_url=‘httnnethreitz/requests/tarball/master’

    r= requests.get(tarball_url, stream=True)

    仅在这一点上已下载的响应头和连接保持打开状态,从而使我们能够使内容检索条件:

    if int(r.headers[‘content-length’])< TOO_LONG:

    您可以进一步控制的使用的Response.iter_content和Response.iter_lines方法的工作流程,或从基本的urllib3 urllib3.HTTPResponse在Response.raw阅读。

    需要注意的是发布的连接会回到池会重用所有以读取的数据:

    确保为设置数据流false或阅读Response对象的内容属性。

    请求支持它允许你发送大量的没有读取到内存的流或文件流上传,。要流和上传,只需为你的身体提供了一个类似文件的对象:

    with open(‘massive-body’) as f:

    requests.post(‘httpl/streamed’, data=f)

    还请支持分块传输编码传出和传入的请求。要发送一个数据块编码的请求,只是提供一个生成器(或任何没有长度的迭代器)为您的BODY:

    requests.post(‘http:/chunked’, data=gen())

    请求有一个钩子,系统,你可以用它来处理申请过程中的部分或信号事件的处理。

    您可以指定一个钩子函数在每个请求的基础上,通过一个{hook_name:callback_function}字典的钩请求参数:

    hooks=dict(response=print_url)

    那CALLBACK_FUNCTION将收到的数据块作为第一个参数。

    >>> requests.get(‘httbin.org’,hooks=dict(response=print_url))

    这callback_function将收到一大块的数据作为第一个参数。

    from requests.auth import AuthBase

    ”““Attaches HTTP Pizza Authentication tothe given Request object.”“”

    # setup any auth-related datahere

    # modify and return the request

    r.headers[‘X-Pizza’]=self.username

    Then, we can make a request using our Pizza Auth:

    >>> requests.get(‘httrg/admin’,auth=PizzaAuth(‘kenneth’))

    requests.get(“hple.org”, proxies=proxies)

    您还可以配置代理服务器环境HTTP_PROXY and HTTPS_PROXY.

    \( export HTTP_PROXY="http://10.10.1.10:3128"</p><p style="text-indent:2em;">\) export HTTPS_PROXY=”http://10.10.1.10:1080”

    &gt;&gt;&gt; requests.get(“hple.org”)

    To use HTTP Basic Auth with your proxy, use the http://user:password@host/syntax:

    “http”:“htpass@10.10.1.10:3128/”,

    要求是为了符合相关的规范和RFC的合规性,不会造成困难,为用户。这受到关注,可能会导致一些看似寻常的行为,可能对那些不熟悉有关规范。

    如果没有明确的字符集是在HTTP头中的Content-Type头中包含文本。在这种情况下,RFC 2616指定默认的字符集必须是ISO-8859-1

    要求提供访问几乎是全方位的HTTP动词:GET,OPTIONS,HEAD,POST,PUT,PATCH和DELETE。下面提供了详细的例子,使用这些不同的动词在请求中,使用GitHub的API。

    &gt;&gt;&gt; r=requests.get(‘httcom/repos/kennethreitz/requests/git/commits/a050faf084662f3a352dd1a941f2c7c9f886d4ad’)

    因此,GitHub的返回JSON。我们可以使用r.json的方法来解析为Python对象。

    &gt;&gt;&gt; commit_data= r.json()

    &gt;&gt;&gt; print commit_data.keys()

    [u‘committer’, u‘author’, u‘url’, u‘tree’, u‘sha’, u‘parents’, u‘message’]

    &gt;&gt;&gt; print commit_data[u‘committer’]

    {u‘date’: u‘2012-05-10T11:10:50-07:00’, u‘email’: u‘me@kennethreitz.com’,u‘name’: u‘Kenneth Reitz’}

    &gt;&gt;&gt; print commit_data[u‘message’]

    请求可以很容易地使用各种形式的认证,包括很常见的基本身份验证。

    &gt;&gt;&gt; from requests.auth import HTTPBasicAuth

    &gt;&gt;&gt; auth= HTTPBasicAuth(‘fake@example.com’,‘not_a_real_password’)

    &gt;&gt;&gt; r= requests.post(url=url, data=body, auth=auth)

    &gt;&gt;&gt; content= r.json()

    &gt;&gt;&gt; print content[u‘body’]

    Sounds great! I‘ll get right on it.

    本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。