237 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Easy-RSA 3 Documentation Readme
 | |
| ===============================
 | |
| 
 | |
| This document explains how Easy-RSA 3 and each of its assorted features work.
 | |
| 
 | |
| If you are looking for a quickstart with less background or detail, an
 | |
| implementation-specific How-to or Readme may be available in this (the `doc/`)
 | |
| directory.
 | |
| 
 | |
| Easy-RSA Overview
 | |
| -----------------
 | |
| 
 | |
| Easy-RSA is a utility for managing X.509 PKI, or Public Key Infrastructure. A
 | |
| PKI is based on the notion of trusting a particular authority to authenticate a
 | |
| remote peer; for more background on how PKI works, see the `Intro-To-PKI`
 | |
| document.
 | |
| 
 | |
| The code is written in platform-neutral POSIX shell, allowing use on a wide
 | |
| range of host systems. The official Windows release also comes bundled with the
 | |
| programs necessary to use Easy-RSA. The shell code attempts to limit the number
 | |
| of external programs it depends on. Crypto-related tasks use openssl as the
 | |
| functional backend.
 | |
| 
 | |
| Feature Highlights
 | |
| ------------------
 | |
| 
 | |
| Here's a non-exhaustive list of the more notable Easy-RSA features:
 | |
| 
 | |
|  *  Easy-RSA is able to manage multiple PKIs, each with their own independent
 | |
|     configuration, storage directory, and X.509 extension handling.
 | |
|  *  Multiple Subject Name (X.509 DN field) formatting options are supported. For
 | |
|     VPNs, this means a cleaner commonName only setup can be used.
 | |
|  *  A single backend is used across all supported platforms, ensuring that no
 | |
|     platform is 'left out' of the rich features. Unix-alikes (BSD, Linux, etc)
 | |
|     and Windows are all supported.
 | |
|  *  Easy-RSA's X.509 support includes CRL, CDP, keyUsage/eKu attributes, and
 | |
|     additional features. The included support can be changed or extended as an
 | |
|     advanced feature.
 | |
|  *  Interactive and automated (batch) modes of operation
 | |
|  *  Flexible configuration: features can be enabled through command-line
 | |
|     options, environment variables, a config file, or a combination of these.
 | |
|  *  Built-in defaults allow Easy-RSA to be used without first editing a config
 | |
|     file.
 | |
| 
 | |
| Obtaining and Using Easy-RSA
 | |
| ----------------------------
 | |
| 
 | |
| #### Download and extraction (installation)
 | |
| 
 | |
|   Easy-RSA's main program is a script, supported by a couple of config files. As
 | |
|   such, there is no formal "installation" required. Preparing to use Easy-RSA is
 | |
|   as simple as downloading the compressed package (.tar.gz for Linux/Unix or
 | |
|   .zip for Windows) and extract it to a location of your choosing. There is no
 | |
|   compiling or OS-dependent setup required.
 | |
| 
 | |
|   You should install and run Easy-RSA as a non-root (non-Administrator) account
 | |
|   as root access is not required.
 | |
| 
 | |
| #### Running Easy-RSA
 | |
| 
 | |
|   Invoking Easy-RSA is done through your preferred shell. Under Windows, you
 | |
|   will use the `EasyRSA Start.bat` program to provide a POSIX-shell environment
 | |
|   suitable for using Easy-RSA.
 | |
| 
 | |
|   The basic format for running commands is:
 | |
| 
 | |
|     ./easyrsa command [ cmd-opts ]
 | |
| 
 | |
|   where `command` is the name of a command to run, and `cmd-opts` are any
 | |
|   options to supply to the command. Some commands have mandatory or optional
 | |
|   cmd-opts. Note the leading `./` component of the command: this is required in
 | |
|   Unix-like environments and may be a new concept to some Windows users.
 | |
| 
 | |
|   General usage and command help can be shown with:
 | |
| 
 | |
|     ./easyrsa help [ command ]
 | |
| 
 | |
|   When run without any command, general usage and a list of available commands
 | |
|   are shown; when a command is supplied, detailed help output for that command
 | |
|   is shown.
 | |
| 
 | |
| Configuring Easy-RSA
 | |
| --------------------
 | |
| 
 | |
| Easy-RSA 3 no longer needs any configuration file prior to operation, unlike
 | |
| earlier versions. However, the `vars.example` file contains many commented
 | |
| options that can be used to control non-default behavior as required. Reading
 | |
| this file will provide an idea of the basic configuration available. Note that
 | |
| a vars file must be named just `vars` (without an extension) to actively use it.
 | |
| 
 | |
| Additionally, some options can be defined at runtime with options on the
 | |
| command-line. A full list can be shown with:
 | |
| 
 | |
|     ./easyrsa help options
 | |
| 
 | |
| Any of these options can appear before the command as required as shown below:
 | |
| 
 | |
|     ./easyrsa [options] command [ cmd-opts ]
 | |
| 
 | |
| For experts, additional configuration with env-vars and custom X.509 extensions
 | |
| is possible. Consult the `EasyRSA-Advanced` documentation for details.
 | |
| 
 | |
| Getting Started: The Basics
 | |
| ---------------------------
 | |
| 
 | |
| Some of the terms used here will be common to those familiar with how PKI works.
 | |
| Instead of describing PKI basics, please consult the document `Intro-To-PKI` if
 | |
| you need a more basic description of how a PKI works.
 | |
| 
 | |
| #### Creating an Easy-RSA PKI
 | |
| 
 | |
|   In order to do something useful, Easy-RSA needs to first initialize a
 | |
|   directory for the PKI. Multiple PKIs can be managed with a single installation
 | |
|   of Easy-RSA, but the default directory is called simply "pki" unless otherwise
 | |
|   specified.
 | |
| 
 | |
|   To create or clear out (re-initialize) a new PKI, use the command:
 | |
| 
 | |
|     ./easyrsa init-pki
 | |
| 
 | |
|   which will create a new, blank PKI structure ready to be used. Once created,
 | |
|   this PKI can be used to make a new CA or generate keypairs.
 | |
| 
 | |
| #### The PKI Directory Structure
 | |
| 
 | |
|   An Easy-RSA PKI contains the following directory structure:
 | |
| 
 | |
|   * private/ - dir with private keys generated on this host
 | |
|   * reqs/ - dir with locally generated certificate requests (for a CA imported
 | |
|     requests are stored here)
 | |
| 
 | |
|   In a clean PKI no files exist yet, just the bare directories. Commands called
 | |
|   later will create the necessary files depending on the operation.
 | |
| 
 | |
|   When building a CA, a number of new files are created by a combination of
 | |
|   Easy-RSA and (indirectly) openssl. The important CA files are:
 | |
| 
 | |
|   * `ca.crt` - This is the CA certificate
 | |
|   * `index.txt` - This is the "master database" of all issued certs
 | |
|   * `serial` - Stores the next serial number (serial numbers increment)
 | |
|   * `private/ca.key` - This is the CA private key (security-critical)
 | |
|   * `certs_by_serial/` - dir with all CA-signed certs by serial number
 | |
|   * `issued/` - dir with issued certs by commonName
 | |
| 
 | |
| #### After Creating a PKI
 | |
| 
 | |
|   Once you have created a PKI, the next useful step will be to either create a
 | |
|   CA, or generate keypairs for a system that needs them. Continue with the
 | |
|   relevant section below.
 | |
| 
 | |
| Using Easy-RSA as a CA
 | |
| ----------------------
 | |
| 
 | |
| #### Building the CA
 | |
| 
 | |
|   In order to sign requests to produce certificates, you need a CA. To create a
 | |
|   new CA in a PKI you have created, run:
 | |
| 
 | |
|     ./easyrsa build-ca
 | |
| 
 | |
|   Be sure to use a strong passphrase to protect the CA private key. Note that
 | |
|   you must supply this passphrase in the future when performing signing
 | |
|   operations with your CA, so be sure to remember it.
 | |
| 
 | |
|   During the creation process, you will also select a name for the CA called the
 | |
|   Common Name (CN.) This name is purely for display purposes and can be set as
 | |
|   you like.
 | |
| 
 | |
| #### Importing requests to the CA
 | |
| 
 | |
|   Once a CA is built, the PKI is intended to be used to import requests from
 | |
|   external systems that are requesting a signed certificate from this CA. In
 | |
|   order to sign the request, it must first be imported so Easy-RSA knows about
 | |
|   it. This request file must be a standard CSR in PKCS#10 format.
 | |
| 
 | |
|   Regardless of the file name to import, Easy-RSA uses a "short name" defined
 | |
|   during import to refer to this request. Importing works like this:
 | |
| 
 | |
|     ./easyrsa import-req /path/to/request.req nameOfRequest
 | |
| 
 | |
|   The nameOfRequest should normally refer to the system or person making the
 | |
|   request.
 | |
| 
 | |
| #### Signing a request
 | |
| 
 | |
|   Once Easy-RSA has imported a request, it can be reviewed and signed. Every
 | |
|   certificate needs a "type" which controls what extensions the certificate gets
 | |
|   Easy-RSA ships with 3 possible types: `client`, `server`, and `ca`, described
 | |
|   below:
 | |
| 
 | |
|   * client - A TLS client, suitable for a VPN user or web browser (web client)
 | |
|   * server - A TLS server, suitable for a VPN or web server
 | |
|   * ca - A intermediate CA, used when chaining multiple CAs together
 | |
| 
 | |
|     ./easyrsa sign-req <type> nameOfRequest
 | |
| 
 | |
|   Additional types of certs may be defined by local sites as needed; see the
 | |
|   advanced documentation for details.
 | |
| 
 | |
| #### Revoking and publishing CRLs
 | |
| 
 | |
|   If an issue certificate needs to be revoked, this can be done as follows:
 | |
| 
 | |
|     ./easyrsa revoke nameOfRequest
 | |
| 
 | |
|   To generate a CRL suitable for publishing to systems that use it, run:
 | |
| 
 | |
|     ./easyrsa gen-crl
 | |
| 
 | |
|   Note that this will need to be published or sent to systems that rely on an
 | |
|   up-to-date CRL as the certificate is still valid otherwise.
 | |
| 
 | |
| Using Easy-RSA to generate keypairs & requests
 | |
| ----------------------------------------------
 | |
| 
 | |
| Easy-RSA can generate a keypair and certificate request in PKCS#10 format. This
 | |
| request is what a CA needs in order to generate and return a signed certificate.
 | |
| 
 | |
| Ideally you should never generate entity keypairs for a client or server in a
 | |
| PKI you are using for your CA. It is best to separate this process and generate
 | |
| keypairs only on the systems you plan to use them.
 | |
| 
 | |
| Easy-RSA can generate a keypair and request with the following command:
 | |
| 
 | |
|     ./easyrsa gen-req nameOfRequest
 | |
| 
 | |
| You will then be given a chance to modify the Subject details of your request.
 | |
| Easy-RSA uses the short name supplied on the command-line by default, though you
 | |
| are free to change it if necessary. After providing a passphrase and Subject
 | |
| details, the keypair and request files will be shown.
 | |
| 
 | |
| In order to obtain a signed certificate, the request file must be sent to the
 | |
| CA for signing; this step is obviously not required if a single PKI is used as
 | |
| both the CA and keypair/request generation as the generated request is already
 | |
| "imported."
 | |
| 
 |