# Upgrading EasyRSA

**Note**: This wiki is a *work in progress*.

This page describes the EasyRSA PKI upgrade process:
   EasyRSA PKI version 2 to EasyRSA version 3, see below.


## Setup

 1. You must install a new copy of EasyRSA v3.0.7 or above
 1. Copy your existing **EasyRSA version 2 files and directories** into `./easyrsa3`
      Your `./easyrsa3` directory should now look *something* like below (in Before section).
 1. Linux: run `./easyrsa upgrade pki`
 1. Windows: run `easyrsa-start.bat` and then `./easyrsa upgrade pki`
      If you have trouble starting EasyRSA-v3, please consult the relevant documentation. \\
      Your `./easyrsa3` directory should now look *something* like below (in After section).

### Examples

* **Linux**

   Your current Easy-RSA **Version 2** PKI is located under `/root/easyrsa`
   Your new Easy-RSA **Version 3** PKI will be located at `/etc/openvpn/easyrsa/pki`

   Change directory to `/etc/openvpn/easyrsa`
   Test that `easyrsa help` works, if that does not work then test that `./easyrsa help` works.

   If you do not have a working copy of the `easyrsa` script then you **cannot** continue.

   Copy `/root/easyrsa` to `/etc/openvpn/easyrsa`

* **Windows**

   Your current Easy-RSA **Version 2** PKI is located under `\users\easyrsa`
   Your new Easy-RSA **Version 3** PKI will be located at `\Program Files\Openvpn\easy-rsa\pki`

   Start Easy-RSA `EasyRSA-Start.bat`

   Copy `\users\easyrsa` to `/Program Files\Openvpn\easy-rsa`

## Usage

To perform the upgrade:


1. ``` ./easyrsa upgrade pki ```
   This will upgrade a version 2 PKI to version 3.
   This upgrade will also perform the CA upgrade below.
   The CA is set to allow duplicate certificates to allow for for renewal.
   The PKI is not changed only copied.

2. ``` ./easyrsa upgrade ca ```
   The CA is set to allow duplicate certificates to allow for for renewal.
   The PKI is not changed.

To automate this upgrade use `--batch`

## Steps

These CHECKS will be made if you upgrade now:

 Before ANY changes are made a test run will be attempted ...

      * Verify: new PKI dir does not exist and will not be over written.
      * Verify: new backup PKI dir does not exist and will not be over written.
      * Verify and Source the current PKI settings: ./vars or ./vars.bat
      * Verify the current ca.crt

Then:
 * CONFIRM NOW THAT THIS IS THE CORRECT ca.crt and continue or quit

These CHANGES will be made if you continue:

 Before ANY changes are made a test run will be attempted ...
 * Complete backup of the current PKI to ./VERY-SAFE-PKI
 * Create new PKI dirs for use with EasyRSA-3
 * Copy required working database files to new PKI
 * Copy current PKI to new PKI
 * Update the CA to allow duplicates for renewal
 * create new openssl-easyrsa.cnf file
 * Remove EasyRSA-2 program files
 * Build new EasyRSA-3 vars file

### Before

(This list is not completely accurate ... )

```
.
├── bin
│   ├── { EasyRSA v3 Windows executables ... }
│
├── keys
│   ├── { Your current EasyRSA v2 PKI ... }
│
└── x509-types
      ├── { EasyRSA v3 x509 definition files ... }

Linux EasyRSA-v2 program files:
├── build-ca
├── build-dh
├── build-inter
├── build-key
├── build-key-pass
├── build-ca.bat
├── build-key-pkcs12
├── build-key-server
├── build-req
├── build-req-pass
├── clean-all
├── inherit-inter
├── list-crl
├── make-crl
├── pkitool
├── revoke-crt
├── revoke-full
└── sign-req

Windows EasyRSA-v2 program files:
├── build-ca-pass.bat
├── build-dh.bat
├── build-key.bat
├── build-key-pass.bat
├── build-key-pkcs12.bat
├── build-key-server.bat
├── build-key-server-pass.bat
├── clean-all.bat
├── EasyRSA-Start.bat
├── init-config.bat
├── revoke-full.bat
├── vars.bat
├── vars.bat.sample
└── whichopensslcnf

Common EasyRSA-v2 files:
├── index.txt.start
├── README.txt
└── serial.start

Common EasyRSA-v3 files:
├── easyrsa
├── openssl-easyrsa.cnf
└── vars.example

   ```

### After

   ```
.
├── bin
│   ├── { EasyRSA v3 Windows executables ... }
│
├── keys
│   ├── { Your old EasyRSA v2 PKI ... }
│
├── pki
│   ├── { Your new EasyRSA v3 PKI ... }
│
├── VERY-SAFE-PKI
│   ├── { Your old EasyRSA v2 PKI ... backup files }
│
└── x509-types
      ├── { EasyRSA v3 x509 definition files ... }

Common EasyRSA-v3 files:
├── easyrsa
├── openssl-easyrsa.cnf
├── vars
└── vars.example

   ```

## Fails
**Correct the error reported first.**

Before you can try the update again you MUST remove these two directories:

 * `./easyrsa3/pki`
 * `./easyrsa3/VERY_SAFE_PKI`

You **may** also need to remove the newly created vars file at:

 * `./easyrsa3/vars`

If you find this warning at the top of the ./vars file then it is safe to remove:
 ```
   ########################++++++++++#########################
   ###                                                     ###
   ###  WARNING: THIS FILE WAS AUTOMATICALLY GENERATED     ###
   ###           ALL SETTINGS ARE AT THE END OF THE FILE   ###
   ###                                                     ###
   ########################++++++++++#########################
 ```

### Incompatible `vars` file

The the `vars` file in place uses export which Easyrsa3 does not support.

### Too many `vars` files #ersa-up23-fails-vars-bat

There exists a `vars` file and a `vars.bat` file. Only one of these files may exist.

### CA certificate does not match `vars`/`vars.bat` file settings

The current CA details do not match the `vars` file in place.

## v30x to v306

Only one change is required:
   `pki/index.txt.attr` \\
   Required: `unique_subject = no`


## Debian-based distros

For users of Debian-based distros (Debian, Ubuntu, Mint, Devuan, …):

EasyRSA can be installed with standard package manager: `apt install easy-rsa`.

**Do not** use `make-cadir` to create a directory for migration, because it creates a symlink `.easyrsa` to `/usr/share/easy-rsa/easyrsa`, but when you run a function `./easyrsa upgrade`, it will try to create subdirectories in `/usr/share/easy-rsa/`:

> mkdir: cannot create directory ‘/usr/share/easy-rsa/VERY-SAFE-PKI’: Permission denied

Follow these steps to perform upgrade from v2 keys structure to v3:

* create an empty directory for migration, like `mkdir migrate-from-v2-to-v3`,
* go into it: `cd migrate-from-v2-to-v3`,
* copy old structure, something like: `rsync -a ~/vpn-keys/my-old-keys-v2/ .`,
* check the current structure, it should look like described in [#ersa-up23-before Before],
* copy the main script and 2 more files needed for upgrade: `cp -pv /usr/share/easy-rsa/{easyrsa,openssl-easyrsa.cnf,vars.example} .`
* perform the upgrade: `./easyrsa upgrade pki`,
* check the current structure, it should look like in [#ersa-up23-after After],
* now you can replace script by a symlink, so following `easy-rsa` package update in future will adjust your `./easyrsa`: `ln -sfv /usr/share/easy-rsa/easyrsa ./easyrsa`.


## Help

   https://forums.openvpn.net/viewforum.php?f=31
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9