{ "info": { "author": "OpenStack Security Group", "author_email": "openstack-dev@lists.openstack.org", "bugtrack_url": null, "classifiers": [ "Environment :: OpenStack", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Topic :: Security" ], "description": "Anchor\n======\n\n.. image:: https://img.shields.io/pypi/v/anchor.svg\n :target: https://pypi.python.org/pypi/anchor/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/pyversions/anchor.svg\n :target: https://pypi.python.org/pypi/anchor/\n :alt: Python Versions\n\n.. image:: https://img.shields.io/pypi/format/anchor.svg\n :target: https://pypi.python.org/pypi/anchor/\n :alt: Format\n\n.. image:: https://img.shields.io/badge/license-Apache%202-blue.svg\n :target: https://git.openstack.org/cgit/openstack/anchor/plain/LICENSE\n :alt: License\n\nAnchor is an ephemeral PKI service that, based on certain conditions,\nautomates the verification of CSRs and signs certificates for clients.\nThe validity period can be set in the config file with hour resolution.\n\nIdeas behind Anchor\n===================\n\nA critical capability within PKI is to revoke a certificate - to ensure\nthat it is no longer trusted by any peer. Unfortunately research has\ndemonstrated that the two typical methods of revocation (Certificate\nRevocation Lists and Online Certificate Status Protocol) both have\nfailings that make them unreliable, especially when attempting to\nleverage PKI outside of web-browser software.\n\nThrough the use of short-lifetime certificates Anchor introduces the\nconcept of \"passive revocation\". By issuing certificates with lifetimes\nmeasured in hours, revocation can be achieved by simply not re-issuing\ncertificates to clients.\n\nThe benefits of using Anchor instead of manual long-term certificates\nare:\n\n* quick certificate revoking / rotation\n* always tested certificate update mechanism (used daily)\n* easy integration with certmonger for service restarting\n* certificates are signed only when validation is passed\n* signing certificates follows consistent process\n\nInstallation\n============\n\nIn order to install Anchor from source, the following system\ndependencies need to be present:\n\n* python 2.7\n* python (dev files)\n* libffi (dev)\n* libssl (dev)\n\nWhen everything is in place, Anchor can be installed in one of three\nways: a local development instance in a python virtual environment, a local\nproduction instance or a test instance in a docker container.\n\nFor a development instance with virtualenv, run:\n\n virtualenv .venv && source .venv/bin/activate && pip install .\n\nFor installing in production, either install a perpared system package,\nor install globally in the system:\n\n python setup.py install\n\nRunning the service\n===================\n\nIn order to run the service, it needs to be started via the `pecan`\napplication server. The only extra parameter is a config file:\n\n pecan serve config.py\n\nFor development, an additional `--reload` parameter may be used. It will\ncause the service to reload every time a source file is changed, however\nit requires installing an additional `watchdog` python module.\n\nIn the default configuration, Anchor will wait for web requests on port\n5016 on local network interface. This can be adjusted in the `config.py`\nfile.\n\nPreparing a test environment\n============================\n\nIn order to test Anchor with the default configuration, the following\ncan be done to create a test CA. The test certificate can be then used\nto sign the new certificates.\n\n openssl req -out CA/root-ca.crt -keyout CA/root-ca-unwrapped.key \\\n -newkey rsa:4096 -subj \"/CN=Anchor Test CA\" -nodes -x509 -days 365\n chmod 0400 CA/root-ca-unwrapped.key\n\nNext, a new certificate request may be generated:\n\n openssl req -out anchor-test.example.com.csr -nodes \\\n -keyout anchor-test.example.com.key -newkey rsa:2048 \\\n -subj \"/CN=anchor-test.example.com\"\n\nThat reqest can be submitted using curl (while `pecan serve config.py`\nis running):\n\n curl http://0.0.0.0:5016/v1/sign/default -F user='myusername' \\\n -F secret='simplepassword' -F encoding=pem \\\n -F 'csr==1.2.3)", "cryptography (>=1.0)", "ldap3 (>=0.9.8.2)", "netaddr (>=0.7.12,!=0.7.16)", "oslo.config (>=3.7.0)", "oslo.messaging (>=4.0.0)", "oslo.utils (>=3.5.0)", "pecan (>=1.0.0)", "pyasn1", "pyasn1-modules", "pycadf (>=1.1.0,!=2.0.0)", "requests (>=2.8.1,!=2.9.0)", "stevedore (>=1.5.0)" ], "requires_python": null, "summary": "Webservice to auto-sign certificates for short amount of time", "version": "0.4.0" }, "last_serial": 2017945, "releases": { "0.3": [], "0.4.0": [ { "comment_text": "", "digests": { "md5": "71dd6a2ea934b447afa17dc48af06aac", "sha256": "64deb2a53eac826a4db3c65a669aec1b02d211bc7bf2433a4e9c09f3100c1fa0" }, "downloads": -1, "filename": "anchor-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "71dd6a2ea934b447afa17dc48af06aac", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 86762, "upload_time": "2016-03-21T05:03:44", "url": "https://files.pythonhosted.org/packages/69/8c/5ab315c2d4490278ad71e08e5c970a8800c14269b8265b81eed30ed1cf94/anchor-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf737657c31947560258be8b2d41d893", "sha256": "4c51b20802028453289f5661c03bef65a66afaa9c9807445f9f4c4610cc8a8ea" }, "downloads": -1, "filename": "anchor-0.4.0.tar.gz", "has_sig": false, "md5_digest": "cf737657c31947560258be8b2d41d893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 126312, "upload_time": "2016-03-21T05:03:51", "url": "https://files.pythonhosted.org/packages/ca/7d/4d4c7118756e2fa85b456dbd8f98f009aba8460439964bd83265e9c374a8/anchor-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "71dd6a2ea934b447afa17dc48af06aac", "sha256": "64deb2a53eac826a4db3c65a669aec1b02d211bc7bf2433a4e9c09f3100c1fa0" }, "downloads": -1, "filename": "anchor-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "71dd6a2ea934b447afa17dc48af06aac", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 86762, "upload_time": "2016-03-21T05:03:44", "url": "https://files.pythonhosted.org/packages/69/8c/5ab315c2d4490278ad71e08e5c970a8800c14269b8265b81eed30ed1cf94/anchor-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf737657c31947560258be8b2d41d893", "sha256": "4c51b20802028453289f5661c03bef65a66afaa9c9807445f9f4c4610cc8a8ea" }, "downloads": -1, "filename": "anchor-0.4.0.tar.gz", "has_sig": false, "md5_digest": "cf737657c31947560258be8b2d41d893", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 126312, "upload_time": "2016-03-21T05:03:51", "url": "https://files.pythonhosted.org/packages/ca/7d/4d4c7118756e2fa85b456dbd8f98f009aba8460439964bd83265e9c374a8/anchor-0.4.0.tar.gz" } ] }