跳转到主要内容

为密钥对提供OSX密钥链后端

项目描述

PyPi version Python version Code style: Black Read the docs CI workflow

这个库是keyring的后端插件,它提供了一个用于管理OSX密钥链密钥类项的后端。

支持的功能

  • 通过SecKeyCreateRandomKey自动生成密钥

  • 通过SecItemAdd导入各种格式的现有密钥

  • 在密钥链中存储密钥或生成临时密钥

  • 在安全区域(T2芯片 - 'TPM')中存储密钥;用于代码签名的解释器

  • 限制密钥管理到特定的访问组;用于代码签名的解释器

  • 使密钥不可提取,因此无法检索密钥内容,但只能用于签名或加密

安装

在darwin机器上运行以下命令

$ pip install keyrings.osx_keychain_keys

使用此后端

可以通过编程方式或从CLI使用此后端

import keyring
from keyrings.osx_keychain_keys.backend import OSXKeychainKeysBackend, OSXKeychainKeyType, OSXKeyChainKeyClassType

backend = OSXKeychainKeysBackend(
    key_type=OSXKeychainKeyType.RSA, # Key type, e.g. RSA, RC, DSA, ...
    key_class_type=OSXKeyChainKeyClassType.Private, # Private key, Public key, Symmetric-key
    key_size_in_bits=4096,
    is_permanent=True, # If set, saves the key in keychain; else, returns a transient key
    use_secure_enclave=False, # Saves the key in the T2 (TPM) chip, requires a code-signed interpreter
    access_group=None, # Limits key management and retrieval to set group, requires a code-signed interpreter
    is_extractable=True # If set, private key is extractable; else, it can't be retrieved, but only operated against
)

keyring.set_keyring(backend)

# If password is not set - a key is generated
keyring.set_password('some-label', 'some-tag', password=None)

# If password is set - it could be a file path to a key to import to keychain
keyring.set_password('some-label', 'some-tag', '/tmp/my-private.key')
# It could also be the key-data itself
keyring.set_password('some-label', 'some-tag', '-----BEGIN RSA PRIVATE KEY----\n....')

# Returns a python-wrapped (using hazmat cryptography lib) private / public key
keyring.get_password('some-label', 'some-tag')

# Deletes a key from keychain
keyring.delete_password('some-label', 'some-tag')

keyrings/osx_keychain_keys/exampleskeyrings/osx_keychain_keys/tests中查看更多示例。

命令行工具

还可以使用keyring CLI来操作此后端

$ keyring -b keyrings.osx_keychain_keys.backend.OSXKeychainKeysBackend set "some-label" "some-tag"

安全注意事项

使用mac的密钥链有一些需要注意的问题,具体如下

  • 某些密钥链API要求调用应用程序(在这种情况下是Python解释器)带有特定的Apple权限,即

    • 将密钥保存到安全区域(T2 / TPM芯片)

    • 通过访问控制限制访问(例如,在检索密钥之前要求touch-id / 密码)

    • 将密钥管理限制到特定的访问组

  • 默认情况下,所有插入的密钥都可供可执行的可运行程序访问,这意味着您使用的解释器可以管理生成的或导入的密钥。

    如果您使用 virtualenv,您可以使用 $> venv --copies 创建一个,以限制对特定 venv python 二进制文件的访问。

制作发布版本

在 github 上设置了 CI/CD 流水线 - 一旦将 PR 合并到 master,就会自动部署预发布版本到 github;当标记发布版本时,它将自动部署到 pypi。

运行测试

要本地运行测试(需要 darwin 机器),请安装并调用 tox

项目详情


下载文件

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

源分布

keyrings.osx_keychain_keys-1.0.1.tar.gz (22.1 kB 查看哈希值)

上传时间

构建分布

keyrings.osx_keychain_keys-1.0.1-py2.py3-none-any.whl (17.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF 赞助商 PingdomPingdom 监控 SentrySentry 错误日志 StatusPageStatusPage 状态页面