forked from TrueCloudLab/certificates
first pass at README
This commit is contained in:
parent
fb3a54e3ff
commit
e8baba3e30
3 changed files with 375 additions and 1 deletions
13
CHANGELOG.md
Normal file
13
CHANGELOG.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased - 0.0.1] - DATE
|
||||
### Added
|
||||
### Changed
|
||||
### Deprecated
|
||||
### Removed
|
||||
### Fixed
|
||||
### Security
|
247
README.md
247
README.md
|
@ -1 +1,246 @@
|
|||
## SHHHH, THIS PROJECT HASN'T OFFICIALLY LAUNCHED YET AND THIS REPO IS SUPER SECRET!!!
|
||||
# SHHHH, THIS PROJECT HASN'T OFFICIALLY LAUNCHED YET AND THIS REPO IS SUPER SECRET!!!
|
||||
|
||||
# Step Certificates
|
||||
|
||||
An online certificate authority and related tools for secure automated
|
||||
certificate management, so you can use TLS everywhere.
|
||||
|
||||
For more information and docs see [the Step website](https://smallstep.com/cli/)
|
||||
and the [blog post](https://smallstep.com/blog/zero-trust-swiss-army-knife.html)
|
||||
announcing Step Certificate Authority.
|
||||
|
||||
### Table of Contents
|
||||
|
||||
- [Installing](#installing)
|
||||
- [Documentation](#documentation)
|
||||
- [Terminology](#terminology)
|
||||
- [Getting Started](#getting-started)
|
||||
- [I've Got a Running CA! Now What?](#now-what)
|
||||
- [Versioning](#versioning)
|
||||
- [How To Create A New Release](./distribution.md)
|
||||
- [LICENSE](./LICENSE)
|
||||
- [CHANGELOG](./CHANGELOG.md)
|
||||
|
||||
## Installing
|
||||
|
||||
These instructions will install an OS specific version of the `step` binary on
|
||||
your local machine.
|
||||
|
||||
### Mac OS
|
||||
|
||||
Install `step-ca` via [Homebrew](https://brew.sh/):
|
||||
|
||||
```
|
||||
brew install smallstep/smallstep/step-ca
|
||||
```
|
||||
|
||||
### Linux
|
||||
|
||||
Download the latest Debian package from [releases](https://github.com/smallstep/certificates/releases):
|
||||
|
||||
```
|
||||
wget https://github.com/smallstep/certificates/releases/download/X.Y.Z/step_X.Y.Z_amd64.deb
|
||||
```
|
||||
|
||||
Install the Debian package:
|
||||
|
||||
```
|
||||
sudo dpkg -i step-ca_X.Y.Z_amd64.deb
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
Documentation can be found in three places:
|
||||
|
||||
1. On the command line with `step ca help xxx` where `xxx` is the subcommand you are interested in. Ex: `step help ca provisioners list`
|
||||
|
||||
2. On the web at https://smallstep.com/docs/step-ca
|
||||
|
||||
3. In your browser with `step ca help --http :8080` and visiting http://localhost:8080
|
||||
|
||||
## Terminology
|
||||
|
||||
### PKI - Public Key Infrastructure
|
||||
|
||||
Blah blah
|
||||
|
||||
### Provisioners
|
||||
|
||||
Provisioners are people or code that are registered with the CA and authorized
|
||||
to issue "provisioning tokens". Provisioning tokens are single use tokens that
|
||||
can be used to authenticate with the CA and get a certificate.
|
||||
|
||||
## Getting Started
|
||||
|
||||
Demonstrates setting up your own PKI and certificate authority using `step ca`
|
||||
and getting certificates using the `step` command line tool and SDK.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. [Step Cli](https://github.com/smallstep/cli/README.md#installing)
|
||||
|
||||
2. [Step CA](#installing)
|
||||
|
||||
### Initializing PKI and configuring the Certificate Authority
|
||||
|
||||
To initialize a PKI and configure the Step Certificate Authority run:
|
||||
|
||||
```
|
||||
step ca init
|
||||
```
|
||||
|
||||
You'll be asked for a name for your PKI. This name will appear in your CA
|
||||
certificates. It doesn't really matter what you choose. The name of your
|
||||
organization or your project will suffice.
|
||||
|
||||
If you run:
|
||||
|
||||
```
|
||||
tree .
|
||||
```
|
||||
|
||||
You should see:
|
||||
|
||||
```
|
||||
...
|
||||
├── config
|
||||
│ └── ca.json
|
||||
└── secrets
|
||||
├── intermediate_ca.crt
|
||||
├── intermediate_ca_key
|
||||
├── root_ca.crt
|
||||
├── root_ca_key
|
||||
```
|
||||
|
||||
The files created include:
|
||||
|
||||
* `root_ca.crt` and `root_ca_key`: the root certificate and private key for
|
||||
your PKI
|
||||
* `intermediate_ca.crt` and `intermediate_ca_key`: the intermediate certificate
|
||||
and private key that will be used to sign leaf certificates
|
||||
* `ca.json`: the configuration file necessary for running the Step CA.
|
||||
|
||||
All of the files endinging in `_key` are password protected using the password
|
||||
you chose during PKI initialization.
|
||||
|
||||
### What's Inside `ca.json`?
|
||||
|
||||
`ca.json` is responsible for configuring communication, authorization, and
|
||||
default new certificate values for the Step CA. Below is a short list of
|
||||
definitions and descriptions of available configuration attributes.
|
||||
|
||||
* `root`: location of the root certificate on the filesystem. The root certificate
|
||||
is used to mutually authenticate all api clients of the CA.
|
||||
|
||||
* `crt`: location of the intermediate certificate on the filesystem. The
|
||||
intermediate certificate is returned alongside each new certificate,
|
||||
allowing the client to complete the certificate chain.
|
||||
|
||||
* `key`: location of the intermediate private key on the filesystem. The
|
||||
intermediate key signs all new certificates generated by the CA.
|
||||
|
||||
* `password`: optionally store the password for decrypting the intermediate private
|
||||
key (this should be the same password you chose during PKI initialization). If
|
||||
the value is not stored in configuration then you will be prompted for it when
|
||||
starting the CA.
|
||||
|
||||
* `address`: e.g. `127.0.0.1:8080` - address and port on which the CA will bind
|
||||
and respond to requests.
|
||||
|
||||
* `dnsNames`: comma separated list of DNS Name(s) for the CA.
|
||||
|
||||
* `logger`: the default logging format for the CA is `text`. The other options
|
||||
is `json`.
|
||||
|
||||
* `tls`: settings for negotiating communication with the CA; includes acceptable
|
||||
ciphersuites, min/max TLS version, etc.
|
||||
|
||||
* `authority`: controls the request authorization and signature processes.
|
||||
|
||||
- `template`: default ASN1DN values for new certificates.
|
||||
|
||||
- `claims`: default validation for requested attributes in the certificate request.
|
||||
Can be overriden by similar claims objects defined by individual provisioners.
|
||||
|
||||
* `minTLSCertDuration`: do not allow certificates with a duration less
|
||||
than this value.
|
||||
|
||||
* `maxTLSCertDuration`: do not allow certificates with a duration greater
|
||||
than this value.
|
||||
|
||||
* `defaultTLSCertDuration`: if not certificat validity period is specified,
|
||||
use this value.
|
||||
|
||||
* `disableIssuedAtCheck`: disable a check verifying that provisioning
|
||||
tokens must be issued after the CA has booted. This is one prevention
|
||||
against token reuse. The default value is `false`. Do not change this
|
||||
unless you know what you are doing.
|
||||
|
||||
- `provisioners`: list of provisioners. Each provisioner has a `name`,
|
||||
associated public/private keys, and an optional `claims` attribute that will
|
||||
override any values set in the global `claims` directly underneath `authority`.
|
||||
|
||||
|
||||
`step ca init` will generate one provisioner. New provisioners can be added by
|
||||
running `step ca provisioner add`.
|
||||
|
||||
### Running the CA
|
||||
|
||||
To start the CA run:
|
||||
|
||||
```
|
||||
step-ca $STEPPATH/config/ca.step
|
||||
```
|
||||
|
||||
## [I've got a running CA! Now What?](#now-what)
|
||||
|
||||
Now that you have an online CA that authenticates requests before issuing
|
||||
certificates you can begin automating the distribution and maintenance of your
|
||||
PKI.
|
||||
|
||||
### Issuing x.509 certificates for TLS (HTTPS)
|
||||
|
||||
There are two steps to issuing a certificate at the command line:
|
||||
|
||||
1. Generate a provisioning token using your provisioning credentials.
|
||||
2. Generate a CSR and exchange it, along with the provisioning token, for a certificate.
|
||||
|
||||
If you would like to generate a certificate from the command line, the Step CLI
|
||||
provides a single command that will prompt you to select and decrypt an
|
||||
authorized provisioner and then request a new certificate.
|
||||
|
||||
```
|
||||
$ step ca new-certificate "foo.example.com" foo.crt foo.key --ca-url ca.smallstep.com \
|
||||
--root /path/to/root_ca.crt
|
||||
```
|
||||
|
||||
If you would like to generate certificates on demand from an automated configuration
|
||||
configuration management solution (no user input) you would split the above flow
|
||||
into two commands.
|
||||
|
||||
```
|
||||
$ TOKEN=$(step ca new-token foo.example.com \
|
||||
--kid 4vn46fbZT68Uxfs9LBwHkTvrjEvxQqx-W8nnE-qDjts \
|
||||
--ca-url https://ca.example.com \
|
||||
--root /path/to/root_ca.crt --password-file /path/to/provisioner/password)
|
||||
|
||||
$ step ca new-certificate "foo.example.com" foo.crt foo.key --token "$TOKEN" \
|
||||
--ca-url https://ca.example.com --root /path/to/root_ca.crt
|
||||
```
|
||||
|
||||
You can take a closer look at the contents of the certificate using `step certificate inspect`:
|
||||
|
||||
```
|
||||
step certificate inspect foo.crt
|
||||
```
|
||||
|
||||
## Versioning
|
||||
|
||||
We use [SemVer](http://semver.org/) for versioning. For the versions available,
|
||||
see the [tags on this repository](https://github.com/smallstep/cli).
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the
|
||||
[LICENSE](./LICENSE) file for details
|
||||
|
|
116
distribution.md
Normal file
116
distribution.md
Normal file
|
@ -0,0 +1,116 @@
|
|||
# Distribution
|
||||
|
||||
This section describes how to build and deploy publicly available releases of
|
||||
the Step CLI.
|
||||
|
||||
## Creating A New Release
|
||||
|
||||
New releases are (almost) entirely built and deployed by Travis-CI. Creating a new
|
||||
release is as simple as pushing a new github tag.
|
||||
|
||||
**Definitions**:
|
||||
|
||||
* *Standard Release*: ready for public use. no `-rc*` suffix on the version.
|
||||
e.g. `v1.0.2`
|
||||
* *Release Candidate*: not ready for public use, still testing. must have a
|
||||
`-rc*` suffix. e.g. `v1.0.2-rc` or `v1.0.2-rc.4`
|
||||
|
||||
|
||||
1. Figure out the most recent existing tag.
|
||||
|
||||
```
|
||||
git fetch --tags
|
||||
git tag
|
||||
```
|
||||
|
||||
The new tag needs to be the logical successor of the most recent existing tag.
|
||||
See [versioning](./README.md#versioning) section for more information on version numbers.
|
||||
|
||||
2. Select the next tag (but don't actually tag anything yet!!).
|
||||
|
||||
Is the new release a *release candidate* or a *standard release*?
|
||||
|
||||
1. Release Candidate
|
||||
|
||||
If the most recent tag is a standard release, say `v1.0.2`, then the version
|
||||
of the next release candidate should be `v1.0.3-rc.1`. If the most recent tag
|
||||
is a release candidate, say `v1.0.2-rc.3`, then the version of the next
|
||||
release candidate should be `v1.0.2-rc.4`.
|
||||
|
||||
2. Standard Release
|
||||
|
||||
If the most recent tag is a standard release, say `v1.0.2`, then the version
|
||||
of the next standard release should be `v1.0.3`. If the most recent tag
|
||||
is a release candidate, say `v1.0.2-rc.3`, then the version of the next
|
||||
standard release should be `v1.0.3`.
|
||||
|
||||
3. Update the [debian/changelog](./debian/changelog).
|
||||
|
||||
1. Update the version to match the tag selected in the previous step. Leave
|
||||
off the `v` prefix.
|
||||
|
||||
```
|
||||
step-cli (1.0.2) UNRELEASED; urgency=medium
|
||||
...
|
||||
```
|
||||
|
||||
becomes...
|
||||
|
||||
```
|
||||
step-cli (1.0.3) UNRELEASED; urgency=medium
|
||||
...
|
||||
```
|
||||
|
||||
2. Update the change log.
|
||||
|
||||
*sigh* Honestly, this entire step should be handled programmatically.
|
||||
|
||||
3. Commit the changes.
|
||||
|
||||
3. Update the remote origin with your commits.
|
||||
|
||||
Make sure that the local checkout is up to date with
|
||||
with the remote origin and that all local changes have been pushed.
|
||||
|
||||
```
|
||||
git pull --rebase origin master
|
||||
git push
|
||||
```
|
||||
|
||||
4. Create a local tag.
|
||||
|
||||
```
|
||||
git tag v1.0.3 # standard release
|
||||
...or
|
||||
git tag v1.0.3-rc.1 # release candidate
|
||||
```
|
||||
|
||||
5. Push the new tag to the remote origin.
|
||||
|
||||
```
|
||||
git push origin tag v1.0.3 # standard release
|
||||
...or
|
||||
git push origin tag v1.0.3-rc.1 # release candidate
|
||||
```
|
||||
|
||||
6. Check the build status at
|
||||
[Travis-CI](https://travis-ci.com/smallstep/certificates/builds/).
|
||||
|
||||
Travis will begin by verifying that there are no compilation or linting errors
|
||||
and then run the unit tests. Assuming all the checks have passed, Travis will
|
||||
build Darwin and Linux artifacts (for easily installing `step`) and upload them
|
||||
as part of the [Github Release](https://github.com/smallstep/certificates/releases).
|
||||
|
||||
Travis will build and upload the following artifacts:
|
||||
|
||||
* *step-ca_1.0.3_amd64.deb*: debian package for installation on linux.
|
||||
* *step-ca_1.0.3_linux_amd64.tar.gz*: tarball containing a statically compiled linux binary.
|
||||
* *step-ca_1.0.3_darwin_amd64.tar.gz*: tarball containing a statically compiled darwin binary.
|
||||
|
||||
7. Update the Homebrew formula.
|
||||
|
||||
**NOTE**: this only needs to be done for standard releases.
|
||||
|
||||
Follow the steps [here](https://github.com/smallstep/homebrew-smallstep#how-to-update-the-formula).
|
||||
|
||||
*All Done!*
|
Loading…
Reference in a new issue