# SSL

下面的筆記是把DNS交給Cloudflare，然後再交由Cloudflare設定SSL

SSL/TLS 概觀頁面 選擇 **完整嚴格**   
接著要 原始伺服器頁面 **建立憑證** 把 cert.pem 及 key.pem 存取在 /etc/ssl/ ； 勾選 **認證的原點提取**

```
 listen 443 ssl;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    ssl_certificate         /etc/ssl/cert.pem;
    ssl_certificate_key     /etc/ssl/key.pem;
    ssl_client_certificate /etc/ssl/cloudflare.crt;
    ssl_verify_client on;
}
server {
    if ($host = site.com) {
        return 301 https://$host$request_uri;
    }


    server_name site.com;
    listen 80;
    return 404;
```

在原本的conf檔的 server 的最後一個 "}" 前面貼上

在Nginx安裝SSL的方式可以參考：  
[https://www.digitalocean.com/community/tutorials/how-to-host-a-website-using-cloudflare-and-nginx-on-ubuntu-20-04](https://www.digitalocean.com/community/tutorials/how-to-host-a-website-using-cloudflare-and-nginx-on-ubuntu-20-04)

---

還有另一個方式是使用Certbot

```
apt instll certbot
```

安裝

```
certbot -d site.com
```

新增網站

<p class="callout info">務必留意，要先在 /etc/nginx/sites-enabled/ 建立 site.com 的設定檔後再執行，否則他會幫你寫在 /etc/nginx/nginx.conf</p>

```
certbot delete --cert-name site.com
```

刪除指定網站的SSL

<p class="callout info">經驗上Ubuntu 22.04之後的版本會自己執行寫入設定檔的動作，並且也會幫你定期更新憑證，不用自己寫cron跑 certbot renew</p>

Cloudflare想要在驗證SSL網站拿到A的方法到 SSL/TLS 邊緣憑證 **最低 TLS 版本 選1.2** ；拿到A＋的方法 **啟用HTTP 強制安全傳輸 (HSTS)**

<p class="callout warning">我後來用這個SSL的設定發生一件很奇怪的事情，某個subdomain的SSL怪怪的，Mac電腦無法連，但手機能連，就唯獨那個subdomain有問題，其他的沒有。我也有發現那段時間的流量減少，或許我在驗證沒做好？！我最後把 Cloudflare 代理全部移掉，改自己用的 Certbot</p>