custodia, 管理密钥存储和检索的API

分享于 

10分钟阅读

GitHub

  繁體 雙語
A service to manage, retrieve and store secrets
  • 源代码名称:custodia
  • 源代码网址:http://www.github.com/latchset/custodia
  • custodia源代码文档
  • custodia源代码下载
  • Git URL:
    git://www.github.com/latchset/custodia.git
    Git Clone代码到本地:
    git clone http://www.github.com/latchset/custodia
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/latchset/custodia
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Build Status

    Custodia

    管理秘密的工具。

    请参见我们的快速入门指南。

    Custodia是一个针对现代云应用程序定义API的项目,它可以轻松地存储和共享密码。

    Custodia项目提供了明文和加密后端的示例实现,并旨在为在Vault项目。openstack的Barbican。freeipa和类似的数据库等外部数据存储中存储数据提供驱动。

    将来Custodia项目计划增强和丰富 API,以提供更安全的处理 private 密钥的方式,如高速服务和它的他类似的安全系统。

    有关更多信息,请参见Custodia文档: https://custodia.readthedocs.io

    要求

    运行时运行时

    • configparser ( python 2.7 )
    • 安全
    • jwcrypto> = 0.2
    • 请求

    测试

    • 皮普
    • setuptools> = 18.0
    • tox> = 2.3.1

    custodia.ipa 依赖于几个二进制扩展和共享库,用于 比如 cryptography。python-gssapi。python-ldap和 python-nss。 为了在虚拟环境中测试和安装,需要一个C 编译器和几个开发包。

    Fedora
    
    $ sudo dnf install python2 python-pip python-virtualenv python-devel 
    
    
     gcc redhat-rpm-config krb5-workstation krb5-devel libffi-devel 
    
    
     nss-devel openldap-devel cyrus-sasl-devel openssl-devel
    
    
    
    
    debian/ubuntu
    
    $ sudo apt-get update
    
    
    $ sudo apt-get install -y python2.7 python-pip python-virtualenv python-dev 
    
    
     gcc krb5-user libkrb5-dev libffi-dev libnss3-dev libldap2-dev 
    
    
     libsasl2-dev libssl-dev
    
    
    
    

    API稳定性

    有些api是临时的,将来可能会改变。

    • 模块 custodia.cli 中的命令行 接口。
    • 脚本 custodia-cli。
    • custodia.ipa 插件插件
    custodia.ipa-- Custodia插件

    警告 custodia.ipa 是一个带有临时API的技术预览版。

    custodia.ipa 是一个用于 Custodia的插件集合。 它提供与 FreeIPA的集成。 IPAVault插件插件是一个到 FreeIPA库的接口。 密钥是加密和存储在 Dogtag中的故障恢复代理密钥。 插件插件按需创建 private 密钥和签名证书。 最后,插件插件是一个封装ipalib和GSSAPI认证的helper 插件。

    custodia.ipa-要求

    • ipalib> = 4.5.0
    • ipaclient> = 4.5.0
    • python 2.7 ( 在IPA地下室中 python 3支持不稳定。)

    ipalib和ipaclient不在默认情况下被拖入和安装。 这些包依赖于 kerberos/gssapi。LDAP和NSS加密库的附加操作系统包。 这些依赖项在上面的测试。

    
    $ pip install custodia[ipa]
    
    
    
    

    custodia.ipa 需要注册的主机和 Kerberos TGT进行身份验证。 建议提供带有密钥表文件或者gss代理的凭据。 此外,IPAVault 依赖于密钥恢复代理服务( ipa-kra-install )。

    示例配置

    创建目录

    
    $ sudo mkdir/etc/custodia/var/lib/custodia/var/log/custodia/var/run/custodia
    
    
    $ sudo chown USER:GROUP/var/lib/custodia/var/log/custodia/var/run/custodia
    
    
    $ sudo chmod 750/var/lib/custodia/var/log/custodia
    
    
    
    

    创建服务帐户和密钥表

    
    $ kinit admin
    
    
    $ ipa service-add custodia/$HOSTNAME
    
    
    $ ipa service-allow-create-keytab custodia/$HOSTNAME --users=admin
    
    
    $ mkdir -p/etc/custodia
    
    
    $ ipa-getkeytab -p custodia/$HOSTNAME -k/etc/custodia/ipa.keytab
    
    
    $ chown custodia:custodia/etc/custodia/ipa.keytab
    
    
    
    

    IPA证书请求插件需要额外的权限

    
    $ ipa privilege-add 
    
    
     --desc="Create and request service certs with Custodia" 
    
    
    "Custodia Service Certs"
    
    
    $ ipa privilege-add-permission 
    
    
     --permissions="Retrieve Certificates from the CA" 
    
    
     --permissions="Request Certificate" 
    
    
     --permissions="Revoke Certificate" 
    
    
     --permissions="System: Modify Services" 
    
    
    "Custodia Service Certs"
    
    
    # for add_principal=True
    
    
    $ ipa privilege-add-permission 
    
    
     --permissions="System: Add Services" 
    
    
    "Custodia Service Certs"
    
    
    $ ipa role-add 
    
    
     --desc="Create and request service certs with Custodia" 
    
    
    "Custodia Service Cert Adminstrator"
    
    
    $ ipa role-add-privilege 
    
    
     --privileges="Custodia Service Certs" 
    
    
    "Custodia Service Cert Adminstrator"
    
    
    $ ipa role-add-member 
    
    
     --services="custodia/$HOSTNAME" 
    
    
    "Custodia Service Cert Adminstrator"
    
    
    
    

    创建 /etc/custodia/ipa.conf

    
    #/etc/custodia/ipa.conf
    
    
    
    [global]
    
    
    debug = true
    
    
    makedirs = true
    
    
    
    [auth:ipa]
    
    
    handler = IPAInterface
    
    
    keytab = ${configdir}/${instance}.keytab
    
    
    ccache = FILE:${rundir}/ccache
    
    
    
    [auth:creds]
    
    
    handler = SimpleCredsAuth
    
    
    uid = root
    
    
    gid = root
    
    
    
    [authz:paths]
    
    
    handler = SimplePathAuthz
    
    
    paths =/./secrets
    
    
    
    [store:vault]
    
    
    handler = IPAVault
    
    
    
    [store:cert]
    
    
    handler = IPACertRequest
    
    
    backing_store = vault
    
    
    
    [/]
    
    
    handler = Root
    
    
    
    [/secrets]
    
    
    handler = Secrets
    
    
    store = vault
    
    
    
    [/secrets/certs]
    
    
    handler = Secrets
    
    
    store = cert
    
    
    
    

    创建 /etc/systemd/system/custodia@ipa.service.d/override.conf

    在 Fedora 26和更新版本上,Custodia服务文件默认为 python 3。 虽然 FreeIPA 4.5支持 python 3,但它仍然不稳定。 因此,有必要使用 python 2.7运行 custodia.ipa 插件。 你可以使用 systemctl edit custodia@py2.service 若要创建重写或者手动复制文件。 不要忘了在后面的例子中运行 systemctl daemon-reload

    
    [Service]
    
    
    ExecStart=
    
    
    ExecStart=/usr/sbin/custodia-2 --instance=%i/etc/custodia/%i.conf
    
    
    
    

    运行Custodia服务器

    
    $ systemctl start custodia@ipa.socket
    
    
    
    

    IPA证书请求

    IPACertRequest 存储插件可以自动生成或者吊销证书。 它使用后备存储来缓存证书和 private 密钥。 插件可以自动创建服务主体。 主机必须已经存在。 IPACertRequest 不按需创建主机条目。

    请求如 GET/path/to/store/HTTP/client1.ipa.example 为服务 HTTP/client1.ipa.example 生成 private 密钥和 CSR,使用DNS主题替代名称 client1.ipa.example。 CSR随后被转发给IPA并由Dogtag签署。 结果证书及其信任链连同 private 密钥一起返回为一个PEM包。

    
    $ export CUSTODIA_INSTANCE=ipa
    
    
    $ custodia-cli get/certs/HTTP/client1.ipa.example
    
    
    -----BEGIN RSA PRIVATE KEY-----
    
    
    ...
    
    
    -----END RSA PRIVATE KEY-----
    
    
    
    Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
    
    
    Subject: organizationName=IPA.EXAMPLE, commonName=client1.ipa.example
    
    
    Serial Number: 22
    
    
    Validity:
    
    
     Not Before: 2017-04-27 09:44:20
    
    
     Not After: 2019-04-28 09:44:20
    
    
    -----BEGIN CERTIFICATE-----
    
    
    ...
    
    
    -----END CERTIFICATE-----
    
    
    
    Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
    
    
    Issuer: organizationName=IPA.EXAMPLE, commonName=Certificate Authority
    
    
    Serial Number: 1
    
    
    Validity:
    
    
     Not Before: 2017-04-26 08:24:11
    
    
     Not After: 2037-04-26 08:24:11
    
    
    -----BEGIN CERTIFICATE-----
    
    
    ...
    
    
    -----END CERTIFICATE-----
    
    
    
    

    删除请求从后备存储中删除证书/密钥对并同时撤消证书。

    还没有实现吊销或者过期证书的自动续订。

    FreeIPA 4.4支持

    默认设置和权限是针对 FreeIPA> = 4.5调整的。 对于 4.4,插件必须配置为 chain=False。 附加权限 Request Certificate with SubjectAltName 也是必需的。

    
    ipa privilege-add-permission 
    
    
     --permissions="Request Certificate with SubjectAltName" 
    
    
    "Custodia Service Certs"
    
    
    
    

    API  MAN  存储  
    相关文章