怎麼建立一個 Https server?

如何架設一個 https server

如何架設一個 https server

最近 chatbot 聊天機器人很火紅,在 Facebook, Line, Slack, Telegram 上都能夠架設聊天機器人。我們只需要設定 callback url 就可以了。但是, 我們服務的 callback url 通常必須是 https,所以我想分享一下自己是怎麼架設 https server。

會使用到的伺服器軟體及要準備的東西:

  • nginx
  • domain name
  • 一台擁有 public ip 的機器

流程

  • 將 domain name 綁定到你機器的 ip 上
  • 申請 ssl 憑證
  • 設定 nginx, run service

將 domain name 綁定到 ip 上

首先,你得要先取得一個 domain name, 通常這個 domain name 是跟供應商買來的,常見的供應商有:

p.s domain name 購買的期限是以年為單位。

購買了一個 domain name 之後,藉由購買 domain name 的平台網站去管理 DNS,將 A record 的部分設定為你的機器 IP。大概過 3 - 5 分鐘後,就可以利用 domain name 去存取你的網頁服務。

如果你對 DNS 的設定有興趣可以看 這裡

以 Godaddy 為例:

申請 ssl 憑證

ssl 你可以跟供應商購買,GoDaddy, Namecheap 都有在賣。但是如果你跟我一樣窮的話只是單純想要嚐鮮的話,可以試試 Let’s Encrypt 的服務。他可以提供免費的 ssl 憑證,這個憑證有三個月的使用期限,等使用期限快到了再 renewal 就好了。

網路上關於 Let’s Encrypt 的教學都是比較舊版的,現在你只要使用他們提供的 Certbot 服務,按照他們的步驟執行就可以輕鬆取得 ssl 憑證。

首先選擇一下,你的 webserver 和 os 種類

依序執行

$ wget https://dl.eff.org/certbot-auto 
$ chmod a+x certbot-auto
$ ./certbot-auto certonly

這時候會出現藍色的互動式介面,不要慌張,輸入你要填入的東西即可 :)

將所有東西輸入完畢之後,你就已經取得屬於該 domain name 的 ssl 憑證了,是不是很簡單呀?

那些憑證在 /etc/letsencrypt/live/domain/ 下,你可以進入 /etc/letsencrtpy/renewal/ 查看 屬於那個 domain name 的設定,這些會和 nginx ssl_certificate 的設定有關。

稍後設定 nginx 需要用到的是 fullchain.pem, privkey.pem

設定 nginx

接下來開始撰寫 nginx 的設定檔。這份設定檔位於 /etc/nginx/nginx.conf 利用 sudo vim /etc/nginx/nginx.conf 編輯它

基本上,要修改的東西不多,你只需要在 http block 加上這一段:

server {
                   root /usr/share/nginx/html;
                   index index.html index.htm;
                   listen 443 ssl;  # 一般來說 https 服務的 port 是 443
                   server_name your.domain.name; # 這裏要修改變成你的 domain name
                   
                   ssl on;
                   ssl_certificate 剛剛生成的 fullchain 憑證的位址;
                   ssl_certificate_key 剛剛生成 privkey 的位址;
                   
                   location / {
                       proxy_pass http://localhost:8000; # 這是對應到你的 server port,這裡只示範簡易的測試方式。
                   }
                   
           }

設定好了之後,要如何檢驗了是否正確呢?

$ sudo service nginx configtest 

如果顯示 ok 就可以開啟 nginx 的服務了

我們也可以利用 python simple http server 去測試設定的結果

$ python3 -m http.server 

另外,nginx 還可以設定:

  • ssl_protocols
  • ssl_ciphers
  • ssl_dhparams
  • ssl header

後記

以上僅僅是最低限度的 https server, 但是可以確定用來架設你的 line bot

相關內容疑問歡迎討論 or 留言 :)

Reference

留言

這個網誌中的熱門文章

Vim 自動 補完 插件 YouCompleteMe 教學 心得 新手入門 C++ C

C pointer tutorial