星期四, 10月 20, 2016

怎麼建立一個 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

沒有留言:

張貼留言

[Paper note] Multiagent Bidirectionally-Coordinated Nets for Learning to Play StarCraft Combat Games

Paper:  https://arxiv.org/abs/1703.10069 這篇論文是由 Alibaba & UCL共同發表的,並投稿到 NIPS 2017。他們發表了一個 Multi-agent framework 讓 agents 利用共同的 framew...