跳转到主要内容

最小化XML签名和验证,旨在与SAML2一起使用

项目描述

minisignxml

Code style: black CircleCI

用于签名和验证XML文档的Python库。

这个库有意只支持xmldsig规范的一部分。它主要旨在允许SAML文档的签名和验证。

支持的功能

  • 简单的API。
  • 仅支持封装签名 (http://www.w3.org/2000/09/xmldsig#enveloped-signature)
  • 要求并仅支持不带注释的独占XML规范化 (http://www.w3.org/2001/10/xml-exc-c14n#)
  • 支持SHA-256(默认)和SHA-1(为兼容性,不推荐)进行签名和摘要 (https://www.w3.org/2000/09/xmldsig#sha1, https://www.w3.org/2000/09/xmldsig#rsa-sha1, http://www.w3.org/2001/04/xmlenc#sha256, http://www.w3.org/2001/04/xmldsig-more#rsa-sha256)
  • 仅支持X509证书和RSA私钥
  • 使用lxml处理XML,使用cryptography进行加密。
  • 仅支持文档中的单个签名,包含单个引用。
  • 通过在验证文档时提供多个证书来支持证书轮换。

minisignxml不执行IO,您必须自己管理和加载密钥/证书。

API

签名

minisignxml.sign.sign

def sign(
    *,
    element: Element,
    private_key: RSAPrivateKey,
    certificate: Certificate,
    config: SigningConfig = SigningConfig.default(),
    index: int = 0,
    attribute: str = "ID"
) -> bytes:

使用给定的cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey私钥对给定的lxml.etree._Element进行签名,将cryptography.x509.Certificate嵌入到签名中。使用minisignxml.config.SigningConfig来控制使用的哈希算法(默认为SHA-256)。index控制签名元素附加到元素的位置。

如果传入的element没有与attribute匹配的属性,则引发异常。确保Elementattribute属性在整个文档中是唯一的责任在调用者。

返回包含包含签名的序列化XML的bytes

SigningConfig

minisignxml.config.SigningConfig是一个包含以下字段的dataclass

  • signature_method:用于签名的cryptography.hazmat.primitives.hashes.HashAlgorithm。默认为cryptography.hazmat.primitives.hashes.SHA256的一个实例。
  • digest_method:用于内容摘要的cryptography.hazmat.primitives.hashes.HashAlgorithm。默认为cryptography.hazmat.primitives.hashes.SHA256的一个实例。

验证

minisignxml.verify.extract_verified_element

def extract_verified_element(
    *, 
    xml: bytes, 
    certificate: Certificate,  
    config: VerifyConfig=VerifyConfig.default(),
    attribute: str = "ID"
) -> Element:

验证给定的XML文档(作为字节)是否使用提供的cryptography.x509.Certificate私钥正确签名。

extract_verified_element的成功调用不保证通过xml参数传递的整个文档的完整性。仅验证了函数返回的子树。调用者应使用返回的lxml.etree._Element进行进一步处理。

如果验证失败,则引发异常(请参阅minisignxml.errors,尽管可能还会引发其他异常,例如ValueErrorKeyError或其它)。否则,返回已签名的lxml.etree._Element(不一定是传递给extract_verified_element的整个文档),并移除签名。

您可以通过使用自定义的VerifyConfig实例来控制允许的签名和摘要方法。默认情况下,仅允许SHA-256。

minisignxml.verify.extract_verified_element_and_certificate

def extract_verified_element_and_certificate(
    *, 
    xml: bytes, 
    certificates: Collection[Certificate],  
    config: VerifyConfig=VerifyConfig.default(),
    attribute: str = "ID"
) -> Tuple[Element, Certificate]:

类似于extract_verified_element,但允许指定多个证书以帮助证书轮换。将返回用于签名的证书以及验证的元素。

VerifyConfig

minisignxml.config.SigningConfig是一个包含以下字段的dataclass

  • allowed_signature_methods:允许签名的cryptography.hazmat.primitives.hashes.HashAlgorithm类型的容器。默认为{cryptography.hazmat.primitives.hashes.SHA256}
  • allowed_digest_methods:允许内容摘要的cryptography.hazmat.primitives.hashes.HashAlgorithm类型的容器。默认为{cryptography.hazmat.primitives.hashes.SHA256}

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

minisignxml-24.6.tar.gz (8.0 kB 查看哈希值)

上传时间 源代码

构建分发

minisignxml-24.6-py3-none-any.whl (9.5 kB 查看哈希值)

上传时间 Python 3

由以下支持