安全访问Ubiquiti Unifi网络控制器

unificontrol的Python项目详细描述


unifi控制器软件的高级python接口

unificontrol旨在成为 泛素unifi软件定义的网络控制器。此包的目标 包括:

  • 一个干净的界面,支持自省和自我记录。
  • 正确处理SSL连接,即使控制器使用自签名证书,也允许对其进行安全访问。
  • unifi api的简洁、可读的内部表示,以便在控制器中添加新功能时可以轻松添加新的api调用。
  • 仅限python 3,因为它是未来之路。

安装

要安装最新版本,请使用:

pip install unificontrol

要从github安装最新版本的代码,请使用:

pip install -e git+https://github.com/nickovs/unificontrol.git@master#egg=unificontrol

用法

使用此客户端的最简单方法是使用必要的参数创建一个实例并登录。

client=UnifiClient(host="unifi.localdomain",username=UNIFI_USER,password=UNIFI_PASSWORD,site=UNIFI_SITE)

创建客户机时,必须指定主机名(以及主机端口,如果您使用的不是默认的8443)。如果愿意,可以将用户名和密码传递给login方法,而不是contstructor。如果在构造函数中提供用户名和密码,则客户端将在需要时自动登录,并在会话过期时重新验证。

由于unifi控制器使用a自签名证书状态,因此客户端的默认行为是在创建客户端实例时从服务器获取ssl证书,并将所有未来的ssl连接固定为需要的相同的证书。这可以正常工作,但是如果您正在构建一个工具来与控制器对话,并且您有地方存储配置,那么更好的解决方案是将正确证书的副本存储在安全的地方,并使用cert关键字参数将其提供给构造函数。可以使用python ssl库获取服务器的证书状态:

importsslcert=ssl.get_server_certificate(("unifi.localdomain",8443))# Store the cert in a safe place...# Fetch the cert from a safe placeclient=UnifiClient(host="unifi.localdomain",username=UNIFI_USER,password=UNIFI_PASSWORD,site=UNIFI_SITE,cert=cert)

如果您有控制器的正确证书,由已知机构颁发,并且使用者名称与用于访问服务器的主机名称匹配,则可以通过传递cert=none来关闭证书固定。

使用自签名证书的SSL安全性

使用https:协议访问unifi控制器,以保护会话。不幸的是,由于使用了自签名证书,他们这样做并不能防止中间人攻击。要了解这是一个问题的原因以及如何解决它,有必要稍微了解一下ssl证书的作用以及它们是如何做到的。

ssl协议(及其更现代的后续协议tls协议)使用数字证书。这些消息本质上是由某一方数字签名的消息,用于声明特定标识与特定公钥相连接。公钥是一个值,可用于验证数字签名(如这些证书上的签名)。每个证书都有一个颁发者,签名消息的一方,和一个主题,即在此证书中声明其身份/密钥关系的一方。为了验证证书,您需要有一个与颁发者关联的公钥的副本。属于在启动ssl会话过程中发送的证书的主题的公钥用于验证ssl握手消息中的数字签名,这用作与您通信的服务器属于证书的项目。

当您在Internet上建立SSL连接时,另一端的服务器通常有一个由某个知名身份验证颁发的证书资历。您的web浏览器内置了许多知名权威机构的公钥。在这些类型的证书中,主题的标识包括您连接到的服务器的域名,这些权限应该只向域的所有者颁发证书。这样,您就可以确信您连接的是正确的服务器,而不是试图窃听您对话的某个系统。

unifi控制器(以及许多其他本地服务器和设备)通常没有一个公共的、外部可访问的域名,即使有,为该域名获取证书通常是耗时和昂贵的。因此,ubiquiti(与大多数设备供应商一起)所做的就是创建一个自签名证书。这是一个证书,颁发者不是某个众所周知的权威,而是与主题相同的身份。第一次启动unifi控制器时,它会发现它没有证书,并创建一个新的证书,由它自己签名,并用主机名unifi

这种方法有两个问题。首先,由于证书的颁发者不是一个众所周知的权威,许多系统都会抱怨证书是由未知方颁发的。其次,除非您使用非限定域名访问unifi控制器,否则证书中的主机名将与用于访问服务器的主机名不匹配,并且系统将再次投诉域名不匹配。此外,由于证书是凭空创建的,如果您预期并忽略这两个警告,那么没有什么可以阻止窃听者简单地创建一个新的自签名证书并欺骗您将凭据发送到伪造的服务器而不是unifi控制器。

幸运的是,有一个解决这些问题的办法。该解决方案称为证书固定。这基本上只是意味着您希望每次访问同一服务器时都看到相同的证书。如果窃听者已经在您第一次访问服务时拦截了您的连接,这将不会有帮助,但它将保护您的所有后续访问。

此库实现证书固定。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList Java中的搜索字符串   另一个web应用程序的java访问会话   另一个应用程序中的活动和服务之间的java通信   java根据Json字符串类型将Json字符串转换为对象   eclipse如何解决java中的错误异常。lang.NoSuchMethodError:'java。字符串javax。摆动JOptionPane。showInputDialog(java.lang.String)'   线程“main”java中的安卓异常。lang.NoClassDefFoundError:org/codehaus/jackson/JsonParseException   java如何在安卓 emulator上显示Mat图像?使用NDK   Java在本地读取测试源文件,但在服务器上读取失败   java dowhile循环用于计算输入数字中的数字。故障排除代码   JAva初学者在编写获取成本的方法时遇到困难   java是shell游戏。我如何让物体移动,特别是在特定的曲线上,但顺序是随机的?   java如何区分两个同名的JButton   java为什么我在Spring Boot中需要一个接口?   java将文件路径插入数据库将删除\   使用InterfaceType初始化java对象   java如何部署一个分为Angular、Spring Boot和MySQL的项目?   java如何使用Symja解决不等式?