python ssl客户端认证 5C

server端

 # coding:utf-8
from __future__ import absolute_import, division, print_function, with_statement
import socket, ssl
import os
import tornado.tcpserver
from tornado.ioloop import IOLoop
import tornado.gen
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain("/keys/server.crt",
                        "/keys/server.key")
ssl_ctx.load_verify_locations("keys/ca.crt")
ssl_ctx.verify_mode = ssl.CERT_REQUIRED


class A(tornado.tcpserver.TCPServer):
    def handle_stream(self, stream, address):
        self.run(stream)

    @tornado.gen.coroutine
    def run(self, stream):
        body = yield stream.read_bytes(111110, partial=True)
        print(body)

def main():
    server = A(ssl_options=ssl_ctx)
    server.listen(6030, '')


io_loop = IOLoop.current()

io_loop.add_callback(main)
io_loop.start()

client端

 # coding:utf-8

import socket, ssl, pprint
import os
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain("keys/server.crt","keys/server.key")
ssl_sock = ssl_ctx.wrap_socket(s)
ssl_sock.connect(('localhost', 6030))
print repr(ssl_sock.getpeername())
print ssl_sock.cipher()
print pprint.pformat(ssl_sock.getpeercert())
ssl_sock.write("boo!")

运行后

服务器端报错

[SSL: NO_CERTIFICATE_RETURNED] no certificate returned (_ssl.c:590)

客户端也报错

[SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:590)

我想做的是ssl双向认证

3个回答

客户端用的证书跟服务端应该不一样。只不过客户端的证书签发的CA,服务端能够认可

知道不一样,做测试的时候是一样的

服务端这个地方错了:
ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
要修改为
ssl_ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
并增加
ssl_ctx.check_hostname = False

客户端少了验证服务器的CA证书,需增加一行
ssl_ctx.load_verify_locations("keys/ca.crt")

如果你的server.crt证书中域名和主机名不匹配,客户端需要再加两个语句
ssl_ctx.check_hostname=False
ssl_ctx.verify_mode = CERT_NONE

另外,你的证书用途(X.509证书扩展中的ext_usage)必须同时具备serverAuth和clientAuth用途

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Tomcat配置SSL的客户端认证
[color=red][b]证书保存在服务器端,用户通过浏览器访问时,需要将证书下载保存到本地,表示信任服务器站点。[/b][/color] 环境:tomcat-6.0.18、jdk1.6.0_18 [color=darkred]1. 生成密钥库[/color] [code="java"] keytool -genkeypair -v -ke...
ssl开启客户端认证配置
参考: 1.http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html 2.http://www.eclipse.org/jetty/documentation/current/configuring-ssl.html 3.http://www.eclipse.org/jetty/documentation/9.3.0.v20150612/je
Python爬虫之SSL认证处理
python爬虫关于SSL认证的问题初遇SSL认证(不是私密连接) 初遇SSL认证(不是私密连接) 当我们爬取12306的时候,会弹出一个窗口,显示连接不是私密连接,这里就是CA机构认证,每次访问的时候都会出现证书页面错误 我们直接写代码 import request import requests response = requests.get('https://www.123...
python屏蔽ssl认证告警
问题: log:C:\Python27\lib\site-packages\urllib3\connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://u...
SSL认证
  SSL认证 http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议 SSL建立过程 三次握手 协商算法 服务器发送证书给客户端 客户端生成对称密钥 客户端发送http请求 服务器通过对称密钥加密后把网页送到客户端 ...
ssl认证
ssl是双向认证,一些证书的转化,cer,der。。。
kafka增加SSL认证的Producer客户端代码示例
package com.kafka.safe.ssl; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord;
ssl证书认证如何针对每台客户端进行认证
我现在使用ssl证书对客户端进行认证,但是有个问题就是生成的证书可以在所有的客户端认证,怎么样才能使生成的证书只针对一台机子,我现在什么没什么思路,哪位高手给指点下,谢谢了
python关于SSL/TLS认证的实现
最近有个客户端的需求是和服务端建立安全的链路,需要用ssl双向认证的方式实现。刚开始的时候被各种证书认证搞得晕乎乎-_-,花了好长时间才理清思路实现需求,所以写下这篇文章记录分享。接下来先介绍下啥是SSL。 参考 https://blog.csdn.net/wuliganggang/article/details/78428866 https://blog.csdn.net/duanbokan/a...
Nginx配置网站SSL认证
Nginx Https SSL
SSL认证原理
这个只是自己记录和总结,写的只有自己看的懂。。 一,基本概念 1, 不对称加密:有两个秘钥,私钥和公钥。都可以对信息进行加密和解密。 2, 对称加密:只有一个秘钥对信息进行加密。 3, RSA:一种不对称加密的算法 4, Hash计算:Hash计算,这个过程是不可逆的。 5, 签名:就是保证发送的信息不被改过,首先将要发送的信息进行hash计算,得到一个值之后再加密做为一个签名和信息一
Netty下SSL认证
基于Netty下SSL认证的实现. 1、SSL证书说明 2、SSL证书创建 3、加入SSL认证 生成证书内容 package ext.opensource.netty.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java....
[Http]跳过SSL认证
package com.pccw.hktdcb.apiserver.util; import it.sauronsoftware.base64.Base64; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmEx...
Tomcat5.5配置使用SSL认证
参考:http://www.51testing.com/?uid-257506-action-viewspace-itemid-155641   一: 生成CA 证书 不使用第三方权威机构的CA 来认证,自己充当 CA 的角色。   1.  创建私钥 : C:\OpenSSL\bin>openssl genrsa -out ca/ca-key.pem 2048 2.创建证...
微信开发,SSL认证
微信小程序上线必要条件:服务器、域名、SSL认证 已购买阿里云ECS服务器(个人服务器)和域名,将域名解析到个人服务器公网IP,以后就可以直接通过域名,访问个人服务器。 进入审核,审核通过,到已签发下载证书到本地, ...
如何安装SSL 认证
Web server 上安装了SSL 认证,客户端每次访问web 站点都需要提示“There is a problem with this website's security certificate”。并且给了两个选择:rn1)Click here to close this webpage. rn2)Continue to this website (not recommended). rnrn我想把这个ssl 认证装好,就不希望再出现让我选择了。rn请问怎么安装?谢谢!
SSL认证配置与安装
SSL认证配置与安装,希望能给你帮助
Linux服务器SSL证书认证
最近公司好多项目上线, 弄了好几个SSL证书, 又熟练了一阵子 , 简单得很,但想想第一次弄的时候找不着北就 性质使然写一个教程吧!第一步,找到阿里云服务器管理控制台 , 操作如图第二步, 如图 第三步, 如图【第一次申请的时候就是怎么都找不到免费的,这里给予标注】第四步, 如图第五步,     申请, 进入待审核状态 -------> 几小时之后,  审核完成.根据提示, 一般是系统生成的...
Git 忽略ssl认证
使用git克隆仓库的时候,出现以下问题: fatal: unable to access 'https://。。。。': SSL certificate problem: self signed certificate in certificate chain 这是因为通过HTTPS访问Git远程仓库的时候,服务器的SSL证书未经过第三方机构签署。解决方法: 点击编辑系统gitco...
添加SSl认证
/** * get https connection * * @param port * @return * @throws IOException * @throws CertificateException */ private HttpClient makeHttpsClient(int port) throws CertificateExce...
SSL认证流程(单向认证和双向认证)
一、单向认证 客户端认证服务器(常用的认证方式) 二、双向认证 客户端和服务器双向认证
SSL认证(单向认证+双向认证+WebService+Jboss)
一、SSL(Server Socket Layer)简介 Netscape公司提出的SSL协议,旨在达到 在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(www.ietf.org )对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0...
802.1x认证客户端802.1x认证客户端802.1x认证客户端802.1x认证客户端
802.1x认证客户端802.1x认证客户端802.1x认证客户端802.1x认证客户端802.1x认证客户端802.1x认证客户端802.1x认证客户端
锐捷认证客户端v3.95forWindows2000.2003.XP.Vista.732bit锐捷认证客户端
锐捷认证客户端v3.95forWindows2000.2003.XP.Vista.732bit锐捷认证客户端v3.95forWindows2000.2003.XP.Vista.732bit锐捷认证客户端v3.95forWindows2000.2003.XP.Vista.732bit锐捷认证客户端v3.95forWindows2000.2003.XP.Vista.732bit
ssl python
SSL——安全套接字层(Secure Sockers Layer)协议由著名的Netscape公司开发。为了保证通信双方建立安全可靠的传输隧道,SSL使用PKI中的数字证书技术对通信双方进行身份认证;使用对称加密来保证数据保密性;使用消息认证码(MAC)来保证数据完整性
Python SSL
Python SSL
如何用DELPHI做SSL网页的客户端认证?(500分)
现在有一个网站提供个人消费查询,用SSLrn输入用户名,密码后到查询页面,再按日期查询消费明细rnrn请教如何用DELPHI处理登陆验证,及明细记录的查询?
win7打补丁后,客户端连接mysql,ssl认证失败
客户端连接mysql时报: 调用sspi失败,请参见内部异常。rn已找到导致问题的补丁包为kb3172605。rnca证书是自制的,在升级后的环境下重新制作证书,还是报错。rn求大神赐教。
怎样用JAVA程序连接需要客户端证书认证的SSL WEB网站
我建立了一个需要客户端证书认证的WEB站点,但是用我如下JAVA程序进行连接时,始终返回错误的证书提示:rntryrn rn String sAlgorithm = TrustManagerFactory.getDefaultAlgorithm();rn SSLContext ctx = SSLContext.getInstance("SSL");rn rn KeyManagerFactory kmf = KeyManagerFactory.getInstance(sAlgorithm);rn TrustManagerFactory tmf = TrustManagerFactory.getInstance(sAlgorithm);rnrn KeyStore ks = KeyStore.getInstance("jks");rn KeyStore tks = KeyStore.getInstance("jks");rn rn String sCKPass ="12345@gmail.com";rn String sCTKPass ="12345@gmail.com";rnrn ks.load(new FileInputStream("d:/appserver.jks"), sCKPass .toCharArray());rn tks.load(new FileInputStream("d:/appserver.jks"), sCKPass .toCharArray());rnrn kmf.init(ks, sCKPass.toCharArray());rn tmf.init(tks);rnrn ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);rn rn SSLSocket socket = (SSLSocket) ctx.getSocketFactory().createSocket("127.0.0.1", 443);rn rn socket.startHandshake();rn rn String sAffirmParam = "RequestType=AppConfirm&RequestData=abcd";rn rn Writer out = new OutputStreamWriter(socket.getOutputStream(), "GBK");rn out.write("GET /AffirmServer?" + sAffirmParam + rn " HTTP/1.1\r\nAccept: */*\r\n");rn out.write("Host: 127.0.0.1:443\r\n");rn out.write("\r\n");rn out.flush();rn String sLine = null;rn rn BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "GBK"));rn while((sLine = in.readLine())!=null)rn System.out.println(sLine);rn rn rn rn catch(Exception err)rn rn err.printStackTrace();rn rnrn其中appserver.jks中包含了客户端密钥和证书,以及服务器端的证书和根证书rn执行后的错误消息为:javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate,rn但是用openssl生成p12格式的证书并导入的浏览器后,可以与服务器正常通信!但用上面的java客户端却始终不行,不知道是怎么会事呀?rn
为IHS和WAS配置基于SSL证书的客户端认证
为IHS和WAS配置基于SSL证书的客户端认证
SSL经摘要认证传输
嵌入式浏览器shttpd为服务器端,IE浏览器,SSL传输,摘要认证
双向SSL认证配置说明
双向SSL认证配置说明,结合数字证书,实现服务器与客户端双向安全通信认证。
使用JavaMail 发送邮件(SSL认证)
需要的第三方Jar包见附件; import java.security.Security; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import ...
tomcat 启动ssl(单向认证)
1、通过keytools生成keystore keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore d:\server.keystore 注意[color=red]CN必须域名[/color] 比如以后通过https://localhost:8443/path/ 访问...
SSL认证填平免费WiFi的陷阱
【IT168厂商动态】最近,工信部表示:“将推动企业加大网络投资、降低手机流量资费”。有业内人士预测,最短在三个月内,三大运营商的手机流量资费有望下降三层。   可是,即使手机流量资费下降三层,依然不能满足社会需求,依然没有多少“有钱任性”的人可以肆无忌惮地使用手机流量。未来,免费WiFi依然是手机上网的主要通道。现在,公司、家庭的WIFI覆盖已基本实现,并能保障安全上网。可是其他地方的免费Wi
nginx+tomcat的ssl认证问题汇总
Nginx和Tomcat下ssl认证接口问题总结 证书域名和调用域名不匹配 调用方和发布方协议类型不一致 问题 1 ,调用方时报错host与证书中的host不匹配解决方式: 使用与证书中的域名匹配的域名去访问https接口,或在调用的时候设置校验域名setHostnameVerifier为允许所有的域名问题 2 , 由于SSLv2和SSLv3存在心脏滴血、野兽攻击等漏洞,使用会使项目存在安全风险,故
ILLS 7.0 做SSL认证
图文说明,如何在ILLS 7.0 做SSL认证。 图文说明,如何在ILLS 7.0 做SSL认证。
SSL通信加密和证书认证
通讯报文统一使用SSL协议进行保护,证书由省BOSS发布。rnrn上边的那个是要求,是最近做的一个项目中的其中一个要求。rnrn我是做省BOSS这一块的,最近遇到一个功能点。rn做的一个webservice的客户端,然后要求对发送的报文进行SSL协议保护,并由我这面进行证书的发布和认证。rnrn不知道改怎么下手,可以提供一下对应的思路吗。
关于CA SSL 认证的问题
[color=#FF0000][size=14px]我想实现在进入登陆的时候不弹出证书选择窗口,而是在登陆的时候再弹出证书选择窗口,需要怎么做。rn访问这个登陆页面的时候是以HTTPS登陆进来的,现在我在服务器上进行设置后,当进入时就要选择一次,点击登录的时候又要选择一次才可以。有没有什么办法解这样的情况。rn大家有没有关于CA SSL 证书认证 等相关的资料也共享下呢。[/size][/color][img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/26.gif][/img]
棘手的认证问题(ssl,https)
在Windows Server 2003配置好了IIS的https服务。rn服务器证书是通过http://localhost/CertSrv/default.asp申请的。(非付费的)rn在客户端的IE中,可以使用https浏览访问。rn可是使用WTK(2.5.2)访问,老是提示:Certificate was issued by an unrecognized entity。rn网上找了很多方法,都不起作用。rn
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池