letsencrypt使用記錄(結合Nginx)

letsencrypt是什麼就不作過多的贅述了,它對於咱們的意義在於方便的簽發證書、加密、被主流瀏覽器信任。html

letsencrypt 官網
客戶端:certbot 官網nginx

1. 安裝cerbot(Ubuntu下)

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

2. 申請證書

$ sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d www.domain1.com -d domain1.com

$ sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d www.domain2.com -d domain2.com

# 成功後的證書可在這查看
$ ls /etc/letsencrypt/live

以上是分別爲www.domain1.com,domain1.com,www.domain2.com,domain2.com 域名申請了證書。web

--webroot 模式表示:CertBot在驗證服務器域名的時候,會在 -w 這個路徑生成一個隨機文件,並經過http-01方式驗證。(更多的其餘模式可在官方文檔中查看,感受這種模式更加自由點)。shell

3. 修改nginx配置文件

server {
  listen 443;
  ssl on;
  server_name domain1.com www.domain1.com;
  ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;

}

重載nginx,而後在瀏覽器訪問 https://www.domain1.com 便可查看效果。後端

而後,根據業務需求,實現全站https並攔截http請求,nginx配置文件中添加相關重定向:瀏覽器

# http轉https
server{
  listen 80;
  server_name domain1.com www.domain1.com;
  #告訴瀏覽器有效期內只准用 https 訪問
  add_header Strict-Transport-Security max-age=15768000;
  #永久重定向到 https 站點
  return 301 https://$host$request_uri;
}

server {
  listen 443;
  ssl on;
  server_name domain1.com www.domain1.com;
  ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;

  # 重定向轉發給後端程序
  location /demo {
    proxy_pass http://demo;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

# https 對於未匹配的域名的處理(如domain2.com)
server {
  listen 443 ssl default_server;
  server_name _;
  # 雖然不是對應的證書,但得有,不然不能正常訪問
  ssl_certificate ssl_certificate /etc/letsencrypt/live/www.domain1.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/www.domain1.com/privkey.pem;
  return 404;
}

4. 其餘

# 定時更新證書 (還未驗證效果)
sudo crontab -e
# 添加: 30 2 * */2 * /usr/bin/certbot renew  >> /var/log/le-renew.log

# 刪除已有的證書(可選擇)
sudo certbot delete
相關文章
相關標籤/搜索