Skip to main content

The missing certificate infrastructure for web APIs.

Project description

CI Docs

Certified

An idiomatic framework for using certificates and cookies (macaroons/biscuits) within python web API-s.

We make the following design choices:

  • mTLS - mutual transport layer certificates (x509) authenticate client and server to one another

  • scopes - clients can "prove" they have access to a scope (e.g. admin) by including it within their 'certificatePolicies' at the handshake phase

  • tokens/cookies - we rely on the datalog model of biscuits to exchange cookies that carry authorization proofs. Tokens, not certificates are used to delegate authorization.

  • symmetry - symmetric ideas are used for setting up mutual identity verification (authentication) between client and server. This allows servers to act as clients in complex workflows, and clients to act as servers to run callbacks.

  • key management - we prescribe a file layout for these. Key file-names serve as a short-hand for referencing a given client/server. See docs/keys.


How do I know who originated an API request -- what organization they come from, and what kinds of organizational policies they have been asked to follow?

How can I consistently apply my own site's security policy to API actions?

And -- the big question -- how can I, as a client using an API, obtain, manage, and send these credentials to servers I interact with?

The certified package has you covered.

See documentation for explanations and howto-s.

License

Certified is available under a 3-clause BSD-style license, available in the file LICENSE.

Portions of certified (as marked in the code) are derived from python-trio/trustme, and are made available under the MIT license -- as reproduced within those files.

Installation

As a user, install with

pip install .

For development

As a developer, install with:

poetry install --with docs,test

Add new dependencies using, e.g.:

poetry add pydantic          # run-time dependency
poetry add mkdocs-material --group docs # documentation-generation dep.
poetry add mypy            --group test # test-time dep.

Run tests with:

poetry run mypy .
poetry run pytest

Preview the documentation with:

poetry run mkdocs serve &

Docs

Documentation was built using this guide -- which comes highly recommended.

Roadmap

  • v0.8.1

    • use base64-encoded DER for storing keys in yaml files.

    • select certificate chain to send to server based on server name (test server configs.)

  • v0.9.0

    • better logging

    • simpler introduction methodology

    • readthedocs integration

    • biscuit examples

  • v1.0.0

    • replace httpx with aiohttp. The Request object is awful. Test client/server support is bad.

    • change servers to services where appropriate

  • v1.0.2

    • add docs on how to use openssl to decode certificate contents

    • throw warning if id.crt does not contain the server's hostname in SAN (since this will usually result in a connection error from SSL)

  • v1.0.10

    • CI and better test coverage

    • better documentation for known_services and interface for showing configuration contents

  • v 1.1.0

    • Better documentation and more helpful error messages

    • Demo presentations and lessons learned

    • CLI interface for biscuit creation / validation

  • v1.2.0

  • v1.3.0

    • key rotation features and docs

Technology to watch

  • hardware certificate implementations (plug-ins?)

  • OAuth2 integrations / biscuit adoption

List of Useful Microservices

References

[openssl]: https://x509errors.org/guides/openssl "OpenSSL: TLS Guide" -- building a custom validator in C

Use of TLS/certs in services

more on custom attributes using openssl command

More on JWT/cookies/macaroons/biscuits

o

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

certified-0.9.0.tar.gz (37.3 kB view details)

Uploaded Source

Built Distribution

certified-0.9.0-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file certified-0.9.0.tar.gz.

File metadata

  • Download URL: certified-0.9.0.tar.gz
  • Upload date:
  • Size: 37.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.8.0-40-generic

File hashes

Hashes for certified-0.9.0.tar.gz
Algorithm Hash digest
SHA256 5b58e23a7b77b67b52a6e909ec95fd6031497e812a4cc099b7bfb46d3c8d19be
MD5 1d842c06b054b0b2a949f534b82399b0
BLAKE2b-256 370c65df56d27e23ee880af7673f19bdefd08f19086cf3f2c2291f94d4afb0ac

See more details on using hashes here.

File details

Details for the file certified-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: certified-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.10.12 Linux/6.8.0-40-generic

File hashes

Hashes for certified-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c37d0c9e0384ad30ddc3e14050c47abcd4ea608e236296949ab3ced65e47eba8
MD5 b9c3b48ed964739194d6b7db61c42b91
BLAKE2b-256 e8427dce99b10748c055d2964da3514b21186f6edee3ee19895d512bbb355198

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page