> For the complete documentation index, see [llms.txt](https://book.ice-wzl.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.ice-wzl.xyz/infrastructure-development/ssl-cert-generation.md).

# SSL Cert Generation

* One of the easiest ways to generate SSL certs is with `certbot` which leverages `letsencrypt`

### Generate your Certs

* `certbot certonly --manual -d mydomain.com`

### SSL Overview

* This command will generate four files in:

```
/etc/letsencrypt/live/mydomain.com
```

#### privkey,pem

* This is the key file, a.k.a. your private key
* Sometimes also named as `cert.key` or `mydomain.com.key`

#### fullchain.pem

* This is your `crt` file
* Also sometimes named `mydomain.crt`

#### bundle.pem

* Contains all the certificates
* Would be created with

`cat fullchain.pem privkey.pem > bundle.pem`

#### cert.pem

* This file contains only your certificate
* Can only be used by itself if the browser already has the certificate which signed it
* May work in testing, don't use in production

#### chain.pem

* Intermediary signed authority, signed by the root authority
* All browsers are guaranteed to have in their pre-built cache.

### Openssl Generate Certs

Use `openssl` to generate your own self signed cert

```
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt
```

Generate a new private key and Certificate Signing Request

```
openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
```

Generate a certificate signing request (CSR) for an existing private key

```
openssl req -out CSR.csr -key privateKey.key -new
```

Generate a certificate signing request based on an existing certificate

```
openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key
```

Remove a passphrase from a private key

```
openssl rsa -in privateKey.pem -out newPrivateKey.pem
```

### Checking Certs

You can inspect the cert like this:

```
openssl x509 -in cert.pem -text -noout
```

Check a Certificate Signing Request (CSR)

```
openssl req -text -noout -verify -in CSR.csr
```

Check a private key

```
openssl rsa -in privateKey.key -check
```

Check a certificate

```
openssl x509 -in certificate.crt -text -noout
```

Check a PKCS#12 file (.pfx or .p12)

```
openssl pkcs12 -info -in keyStore.p12
```
