Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我需要为Python /SSL-套接字连接分发什么(密钥、证书)?

我需要为Python /SSL-套接字连接分发什么(密钥、证书)?
EN

Stack Overflow用户
提问于 2011-01-05 14:29:40
回答 1查看 3.3K关注 0票数 0

我正在尝试编写一个通用的服务器-客户机应用程序,它可以在服务器之间交换数据。我已经阅读了很多OpenSSL文档,并且成功地设置了自己的CA,并为测试目的创建了一个证书(和私钥)。

我只能使用Python2.3,所以我不能使用标准的"ssl“库。相反,我被PyOpenSSL困住了,这看起来并不坏,但关于它的文档不多。

我的问题并不是要让它起作用。我对证书和他们需要去的地方比较困惑。

下面是工作的两个程序:

服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/env python

from OpenSSL import SSL
import socket
import pickle

def verify_cb(conn, cert, errnum, depth, ok):
    print('Got cert: %s' % cert.get_subject())
    return ok


ctx = SSL.Context(SSL.TLSv1_METHOD)
ctx.set_verify(SSL.VERIFY_PEER|SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_cb)

# ??????
ctx.use_privatekey_file('./Dmgr-key.pem')
ctx.use_certificate_file('Dmgr-cert.pem')
# ??????
ctx.load_verify_locations('./CAcert.pem')

server = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))

server.bind(('', 50000))
server.listen(3)

a, b = server.accept()

c = a.recv(1024)
print(c)

客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from OpenSSL import SSL
import socket
import pickle


def verify_cb(conn, cert, errnum, depth, ok):
    print('Got cert: %s' % cert.get_subject())
    return ok

ctx = SSL.Context(SSL.TLSv1_METHOD)
ctx.set_verify(SSL.VERIFY_PEER, verify_cb)

# ??????????
ctx.use_privatekey_file('/home/justin/code/work/CA/private/Dmgr-key.pem')
ctx.use_certificate_file('/home/justin/code/work/CA/Dmgr-cert.pem')
# ?????????
ctx.load_verify_locations('/home/justin/code/work/CA/CAcert.pem')

sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM))
sock.connect(('10.0.0.3', 50000))

a = Tester(2, 2)
b = pickle.dumps(a)
sock.send("Hello, world")

sock.flush()
sock.send(b)
sock.shutdown()
sock.close()

我从ftp://ftp.pbone.net/mirror/ftp.pld-linux.org/dists/2.0/PLD/i586/PLD/RPMS/python-pyOpenSSL-examples-0.6-2.i586.rpm中找到了这个信息,其中包含一些示例脚本。

正如你可能会发现的,我不完全理解“#?”之间的章节。我不明白为什么客户端和服务器都需要证书和私钥。我不知道每个人应该去哪里,但我不应该只分配密钥的一部分(可能是公共部分)吗?如果您仍然需要在每台服务器上同时使用非对称密钥,这就破坏了不对称密钥的目的,对吗?

我尝试交替移除任一框上的pkey或cert,无论删除哪一个,我都会得到以下错误:

OpenSSL.SSL.Error:('SSL例程‘,'ssl _3_READ_字节’,‘ssl警报握手失败’),('SSL例程‘,’ssl_3_写_字节‘,’ssl握手失败‘)

有人能解释一下这是否是SSL的预期行为吗?我真的需要向我的所有客户分发私钥和公共证书吗?我在努力避免任何巨大的安全问题,而泄露私钥往往是个大问题.

谢谢你的帮助!

==================================================================

感谢咖啡馆帮我解决了这个问题。根据他的推荐,我创建了两个新的证书对: spaceman和dmgr。然后,我将两个"spaceman“部分(key,cert)放在客户端程序中,对于"dmgr”键则是相同的。

基本上,Client中只有以下两行进行了更改,尽管使用openssl的工作非常多。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctx.use_privatekey_file('/home/justin/code/work/CA/private/Dmgr-key.pem')
ctx.use_certificate_file('/home/justin/code/work/CA/Dmgr-cert.pem')

更正版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ctx.use_privatekey_file('/home/justin/code/work/CA/private/spaceman-key.pem')
ctx.use_certificate_file('/home/justin/code/work/CA/spacemancert.pem')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-05 20:51:04

在SSL事务中,每一方都可以向另一方提交一个验证其身份的证书。为此,它需要有与该证书相对应的私钥。这些证书是两种不同的证书,因此每一方都有两个不同的私钥。

此证书/私钥对是使用use_privatekey_file()use_certificate_file()设置的。这应该是服务器和客户端上的不同的证书/密钥对。

在验证对等证书时,您需要检查:

  • 证书是有效的(即,由您信任的CA为此应用程序签名,未过期,未被撤销);以及
  • 对应于您认为已连接到的对等方(即证书与对等方声称的标识相匹配)。此标识存储在证书的SubjectName字段中,并且它是特定于应用程序的如何将其映射到对等身份(可能是用户登录名、DNS名称或其他东西)。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4609859

复制
相关文章
python querystring encode_querystring
const querystring = require(‘querystring’);
全栈程序员站长
2022/11/01
6800
如何获取云API密钥?
云 API 是腾讯云开放生态的基石。通过云 API,只需少量的代码即可快速操作云产品;在熟练的情况下,使用云 API 完成一些频繁调用的功能可以极大提高效率;除此之外,通过 API 可以组合功能,实现更高级的功能,易于自动化, 易于远程调用, 兼容性强,对系统要求低。以下是具体操作步骤:
腾讯云@移动安全
2019/01/18
82.6K42
如何获取云API密钥?
如何使用 Python 隐藏 API 密钥
博客首发:https://bornforthis.cn/posts/19.html
AI悦创
2022/06/21
2.2K0
如何使用 Python 隐藏 API 密钥
微信商户号 API 密钥、API 证书配置
只是使用商户号的支付功能可以不配置 API 证书,因为 API 证书只有在一些敏感操作中才用到。比如: 企业付款到零钱、公众号中的现金红包、商户号订单退款,也可以理解为商户号往外出钱的操作
很酷的站长
2022/12/28
6.8K0
微信商户号 API 密钥、API 证书配置
querystring模块详解
parse方法还有三个可选参数,分别是分隔符(默认为&),赋值符(默认为=),以及配置对象,配置对象又有两个可选参数,分别是````maxKeys(最多能解析多少个键值对)和decodeURIComponent(用于解码非utf-8编码字符串,默认为querystring.unescape```)。 例如:
用户2936342
2018/08/27
1.1K0
打印列表从尾部到头部
每一组測试案例包括多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。
全栈程序员站长
2022/07/06
5190
aiohttp 异步http请求-9.ClientSession自定义请求头部
前言 ClientSession是所有客户端 API 操作的核心和主要入口点。会话包含 cookie 存储和连接池,因此 cookie 和连接在同一会话发送的 HTTP 请求之间共享。 自定义请求头部 如果您需要将 HTTP 标头添加到请求中,请将它们传递给 headers 参数。如在请求头部添加"Content-Type": "application/json" headers = { "Content-Type": "application/json" } 完整代码: imp
上海-悠悠
2022/04/27
2.3K0
NodeJS模块研究 - querystring
querystring 是专门用来解析和格式化 URL 的查询字符串 URL 的工具。
心谭博客
2020/04/21
7520
基于Powershell 实现腾讯云 API 调用
虽然腾讯云已经提供了支持多种语言的 SDK,使用起来也非常方便,但是某些环境中没有相关的运行环境使用起来往往带来一些环境准备和合规的成本。PowerShell 作为Windows环境普遍存在脚本环境,如果能够顺利运行云相关API将会非常方便。
用户8856568
2023/01/06
3.2K1
支持QueryString的SiteMapProvider
asp.net 2.0的XmlSiteMapProvider不支持页面的QueryString,下面的代码就是在SiteMapNode上增加了一个属性reliantOn,用来支持QueryString参数
张善友
2022/03/28
3090
通过GiHub 查找 API 密钥、令牌和密码
关键词: Passwords api_key “api keys” authorization_bearer: oauth auth authentication client_secret api_token: “api token” client_id password user_password user_pass passcode client_secret secret password hash OTP user auth
Khan安全团队
2022/05/17
1.1K0
通过GiHub 查找 API 密钥、令牌和密码
微信开发笔记
自动触发服务器脚本,自动打包,更新 1.把github上的项目克隆到本地 2.初始化项目,用node.js搭建环境,是已经过时的项目了 3.安装模块 4.进入微信开发者平台 https://open.weixin.qq.com/ 5.g82.jscook.cn  怎么保存啊? 6.搭建服务? 执行node.js,访问 看端口监听好了没有:在谷歌里 在static里面写一个html静态文件:helloword; 文件是怎样访问到的? 把文件映射到接口中 cat 来查看文件,要是没有,就创建一个 Svon(5
王小婷
2018/06/04
8120
php无法获取到http请求自定义头部问题
而实际开发过程中,可能因为不清楚这个原因而使用_作连接符导致无法获取到自定义的头部。
槽痞
2020/06/23
1.3K0
PHP模拟发送POST请求之一、HTTP协议头部解析
该文介绍了如何通过PHP和JavaScript实现基本的URL伪装,包括处理GET请求和模拟POST请求。通过伪装,可以隐藏请求的URL,绕过一些限制,实现某些绕过登录限制的功能。
枕边书
2018/01/04
1.9K0
腾讯云 API 最佳实践:保护你的密钥
使用腾讯云 API 时,你需要用密钥来签名你的 API 请求。腾讯云接收到你的请求后,会比对你的签名串和实际请求参数。
zqfan
2018/07/18
15.6K2
前端 api 请求缓存方案
来源 | https://github.com/wsafight/personBlog/issues/2
winty
2020/11/06
1.1K0
前端 api 请求缓存方案
API & HTTP 请求调试:Postman
Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试。
跟着阿笨一起玩NET
2018/09/20
1.2K0
API & HTTP 请求调试:Postman
点击加载更多

相似问题

如何在请求头部添加API密钥?

169

如何在python请求头部中发送API密钥?

231

API密钥必须作为API-Key头部在每个请求中传递

10

AJAX如何在头部传递api密钥

22

向API (Wrike)请求发送头部

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文