当前位置:首页 > CN2资讯 > 正文内容

python 连接服务器 python搭服务器

2天前CN2资讯


python 搭建 https 服务器:方法、困难回顾

之前用 Python 3 实现过一个基于 TCP socket、然后手动解析 HTTP 协议数据包的简易 HTTP 服务器;这两天探索将其改装成支持 HTTPS 的版本。本文对过程中的基本方法、遇到的一系列问题等予以回顾。

一、基本思路:ssl 库的 wrap_socket()

ssl 库提供的 wrap_socket(...) 函数,能直接把原有的明文 TCP socket 包装成 ssl 加密的形式,且(似乎?)不影响其它功能。

注意,包装的是每次 accept 得到的连接、而不是一开始就创建的那个监听的连接。

假设原有 HTTP 服务器是:

import socket class MyServer: def __init__(self, port): self.socket_1 = socket.socket(socket.AF_INET , socket.SOCK_STREAM) self.socket_1.bind(('0.0.0.0', port)) self.socket_1.listen(10) def run(self): while True: try: conn, addr = self.socket_1.accept() conn = self.wrap(conn) # 预埋 socket 的包装接口 req_bytes = conn.recv(1024) # ...略 def wrap(self, conn): return conn

则 HTTPS 版本直接继承,并利用包装接口进行包装:

class MyHttpsServer(MyServer): def __init__(self, port, ssl_ctx): super().__init__(port) self.ssl_ctx = ssl_ctx def wrap(self, conn): return self.ssl_ctx.wrap_socket(conn, server_side=True)

这里的 ssl_ctx 是用 ssl 库创建的 context 对象:

# main.py import ssl from xxx import MyHttpsServer ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) ssl_ctx.load_cert_chain(certfile='/path/to/xxxx.pem') server = MyHttpsServer(10022, ssl_ctx)

(端口10022是我随便选的;certfile 后面会详细介绍)

主要参考资料:

  • Simple HTTPS server in python

二、证书相关文件的获取、处理

我的 https 证书是在腾讯云申请的。申请后可以下载各种格式。

得到 .jks 文件及其密码文件后,我的做法是转换成 .pem 文件。

转换的主要参考资料(两种方式):

  • (我成功) after-the-sunrise/JKS to PEM
  • (我暂时没成功) Converting a Java Keystore Into PEM Format 的第4章《Converting a Single Certificate From a JKS Into PEM》

然后就可以传入上一章的 ssl_ctx.load_cert_chain() 函数里。

三、端口不通

注:端口不通问题,可以先用 HTTP 来测试,确保问题与 ssl 无关。

0 - 常用命令

netstat -antplolsof -i:端口号

都可以查看端口的状态信息。

1 - 云服务商的安全组

腾讯云、阿里云的控制台应该都有安全组可以配置,要去那里把对应的端口放通。

主要参考资料:

  • 云服务器修改了安全组要重启吗
  • 不需要,一般云服务器修改了安全组配置后很快就会生效,通常不需要重启服务器。

2 - linux服务器内的防火墙

如果是 linux 系统的服务器,首先要知道它可能有好几个防火墙,而且可能互相影响……请逐个排查。

主要参考资料:

  • 关于ufw、firewalld及iptables之间的关系整理
  • firewall和ufw可共同影响服务器,任一防火墙开启都会使端口无法连接
  • firewall-cmd --state
  • ufw status
  • SELinux、Netfilter、iptables、firewall和UFW五者关系
  • 第1篇:Linux防火墙-firewalld配置
  • ubuntu20.04版本防火墙基本操作
  • ufw allow 10022
  • Linux firewall-cmd开放和关闭端口
  • firewall-cmd --add-port=10022/tcp --permanent 之后还要 firewall-cmd --reload
  • 最全解决方案:Failed to start firewalld - dynamic firewall daemon
  • 如果不是安装Python,那么一般都是firewalld的进程问题。

(同时感谢腾讯云技术咨询人工客服的解答!)

3 - 绑定的地址

不能用 localhost、127.0.0.1 等,否则本机上 ssh 上去并 telnet localhost 10022 能连接、但公网访问就不能连接。

要用 0.0.0.0(见第一章的示例代码)。

主要参考资料:

  • 什么是 127.0.0.1 IP 地址,如何使用它?
  • localhost与127.0.0.1的区别
  • 这一篇还列表比较了
  • python socket bind机器上所有ip的方法
  • bind 0.0.0.0就可以绑定这机器上的所有IP
  • 0.0.0.0
  • 代表当前设备的IP
  • 彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0

4 - netstat 看到是 tcp6 而非 tcp?

看了一些资料。但我最后好像没改动这方面,应该不用管?

主要参考资料:

  • tcp与tcp6的区别
  • 为什么 netstat 对某些服务只显示了 tcp6 监听端口
  • centos中docker映射出来的端口被tcp6监听,而没有被tcp监听导致ip+端口无法进行访问

四、还遇到 SSLError 问题

第三章是先用 HTTP 来测试,所以(端口通了之后)改回 HTTPS 时,别忘了客户端也改回来(尤其是我用了非标准的 10022 端口,浏览器可能不知道是 HTTPS)。(否则这种报错很难看出来)

五、Address already in use

过了一段时间突然就好了。可能是上一次运行崩溃之后,没及时释放端口?


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20768.html

    分享给朋友:

    “python 连接服务器 python搭服务器” 的相关文章

    中国电信CN2网络接入方式解析

    在数字化浪潮席卷全球的今天,网络质量已成为企业生存与发展的关键因素。中国电信作为国内领先的通信运营商,其旗下的CN2网络凭借卓越的性能和覆盖范围,成为众多企业和个人的首选。中国电信CN2网络的接入方式多种多样,您是否清楚每种方式的特点及适用场景?本文将为您逐一解析,帮助您找到最适合的解决方案。中国电...

    中国电信CN2线路接线指南:快速搭建高效网络连接

    在当今信息化时代,网络已经成为企业运营和日常生活不可或缺的一部分。而对于追求高品质网络体验的用户来说,中国电信的CN2线路无疑是一个excellent选择。CN2线路以其高带宽、低延迟和高稳定性著称,广泛应用于企业、游戏服务器、视频传输等多个领域。对于许多用户来说,CN2线路的接线过程可能会显得复杂...

    全球主机论坛:交流与学习的技术社区

    在现代社会,全球主机论坛的出现为我们提供了一个交流和学习的平台。这个论坛主要聚焦于主机领域,用户可以自由讨论主机的各种话题,分享个人经验,并获取最新的行业信息。对我而言,这样的论坛不仅是一个获取知识的地方,更是一个与全球主机用户互动的社区。 全球主机论坛的重要性毋庸置疑。它为主机使用者提供了一个集中...

    购买DNS解锁服务器的最佳选择与配置指南

    在当今的信息时代,获取我们想要的内容常常并不像想象中那样简单。很多流媒体服务在不同地区的可用性有所限制,这使得我们在享受内容时常常受到阻碍。这时候,DNS解锁服务器就成为了解决这个问题的有效工具。DNS解锁技术通过修改服务器上的DNS设置,可以帮助用户突破地理限制,顺利访问各种国际流媒体服务。 我刚...

    如何在VPS上启用和配置IPv6以提升网络性能

    在当今数字化的时代,互联网已经成为我们日常生活中不可或缺的一部分。随着设备和用户数量的快速增长,现有的IPv4地址开始捉襟见肘。这时,IPv6(Internet Protocol Version 6)应运而生,作为下一代互联网协议,它的出现可以说是一种必然趋势。IPv6不仅解决了IPv4地址耗尽的问...

    高性能HKT VPS服务评测与应用指南

    HKT VPS概述 什么是HKT VPS HKT VPS其实就是基于香港HKT网络架构的虚拟专用服务器,提供了强大的性能和灵活的可配置性。我从多个服务商的不同产品中了解到,HKT VPS非常适合对网络速度和稳定性要求较高的用户。无论是游戏玩家还是企业用户,都能通过它享受到快速的上传和下载速度。 HK...