# [[Installing an SSL certificate on Nginx server with Let's Encrypt and Certbot]]
![[Installing an SSL certificate on Nginx server with Let's Encrypt and Certbot.svg]]
%%
Last Updated:
- [[2021-02-08]], [[2024-09-13]]
%%
## Prerequisites
- [[Recommended practices for initializing a new virtual server|A virtual server]]
- A domain name with `A` records pointing to your server
- [[Nginx]] installation on your server with [[Setting up server blocks on Nginx|server blocks]] to use the file `/etc/nginx/sites-available/domain.com`
## Install Certbot
Add the Certbot repo:
```
sudo add-apt-repository ppa:certbot/certbot
```
### Install Nginx package of Certbot
```
sudo apt install python3-certbot-nginx
```
## Allow HTTPS on firewall
### Add HTTPS to allowed list
```
sudo ufw allow 'Nginx Full'
```
### Remove HTTP`
Make it so only encrypted traffic is allowed.
```
sudo ufw delete allow 'Nginx HTTP'
```
### Verify the configuration
`sudo ufw status` should yield something like this:
```bash
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
```
## Get new [[SSL]] cert
You can obtain a free SSL certificate through [[Let's Encrypt]]:
```
sudo certbot --nginx -d notes.nicolevanderhoeven.com -d www.notes.nicolevanderhoeven.com
```
Go through the prompts and wait for the script to finish.
### Verify auto-renewal
[[Let's Encrypt]] certificates are only available for 90 days by default (to make users automate the renewal process). Certbot should do this for you automatically, but to confirm it, run:
```
sudo certbot renew --dry-run
```
### Verify through a browser
Visit your site using https!
## References
- [[DigitalOcean]]: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04
## Related
- [[Nginx]]
- [[Renew Let's Encrypt certificate for Bitwarden self-hosted]]
- [[SSL]]
%%
# Excalidraw Data
## Text Elements
## Drawing
```json
{
"type": "excalidraw",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.1.4",
"elements": [
{
"id": "4y8R7iOA",
"type": "text",
"x": 118.49495565891266,
"y": -333.44393157958984,
"width": 3.8599853515625,
"height": 24,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 967149026,
"version": 2,
"versionNonce": 939059582,
"isDeleted": true,
"boundElements": null,
"updated": 1713723615080,
"link": null,
"locked": false,
"text": "",
"rawText": "",
"fontSize": 20,
"fontFamily": 4,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "",
"lineHeight": 1.2
}
],
"appState": {
"theme": "dark",
"viewBackgroundColor": "#ffffff",
"currentItemStrokeColor": "#1e1e1e",
"currentItemBackgroundColor": "transparent",
"currentItemFillStyle": "solid",
"currentItemStrokeWidth": 2,
"currentItemStrokeStyle": "solid",
"currentItemRoughness": 1,
"currentItemOpacity": 100,
"currentItemFontFamily": 4,
"currentItemFontSize": 20,
"currentItemTextAlign": "left",
"currentItemStartArrowhead": null,
"currentItemEndArrowhead": "arrow",
"scrollX": 583.2388916015625,
"scrollY": 573.6323852539062,
"zoom": {
"value": 1
},
"currentItemRoundness": "round",
"gridSize": null,
"gridColor": {
"Bold": "#C9C9C9FF",
"Regular": "#EDEDEDFF"
},
"currentStrokeOptions": null,
"previousGridSize": null,
"frameRendering": {
"enabled": true,
"clip": true,
"name": true,
"outline": true
}
},
"files": {}
}
```
%%