Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: 網路架站

使用 HTTPS 而非 HTTP

Posted on 2025 年 9 月 19 日2025 年 9 月 19 日 By 日落 在〈使用 HTTPS 而非 HTTP〉中尚無留言

討論 HTTP 與 HTTPS 的優缺點前,先來了解瀏覽器和網頁伺服器之間是怎麼溝通的。


HTTP 通訊

HTTP 的 request 主要包含幾個項目:

  • URL
  • header
  • body

其中 URL 固定以明碼 (plain text) 傳輸,若使用 HTTPS 的話,header 和 body 內容會被加密。

URL 的內容會用於判斷 request 應該要由哪一台伺服器接收 (透過 domain 來判斷),HTTP methods 則用於判斷要如何與伺服器互動,另外還有 HTTP 傳輸協議的版本,例如要使用 HTTP 1.1 或是 2。

以下範例透過 curl 加上 -v 參數,連線至 http://blog.zeroplex.tw/2020/11/01/benfords-law/ 頁面,另外多加上一個 Origin 當作 header。

使用 HTTP (沒有加密) 時,curl 的動作:

curl --http2 --header "Origin: https://zeroplex.tw" -X GET http://blog.zeroplex.tw/2020/11/01/benfords-law/ -v

Note: Unnecessary use of -X or --request, GET is already inferred.
* Host blog.zeroplex.tw:80 was resolved.
* IPv6: (none)
* IPv4: 172.104.77.215
*   Trying 172.104.77.215:80...
* Connected to blog.zeroplex.tw (172.104.77.215) port 80
> GET /2020/11/01/benfords-law/ HTTP/1.1
> Host: blog.zeroplex.tw
> User-Agent: curl/8.5.0
> Accept: */*
> Connection: Upgrade, HTTP2-Settings
> Upgrade: h2c
> HTTP2-Settings: AAMAAABkAAQAoAAAAAIAAAAA
> Origin: https://zeroplex.tw

按照順序,curl 動作的順序如下:

  1. blog.zeroplex.tw:80 was resolved:解析網域名稱,得知網站伺服器的 IP 為 172.104.77.215
  2. Connected to blog.zeroplex.tw (172.104.77.215):連線到伺服器
  3. 送出 request (開頭有 > 的內容)

嘛 …. 蠻簡單的。

再來看看使用 HTTPS (有加密) 時,流程上有什麼差異:

curl --http2 --header "Origin: https://zeroplex.tw" -X GET https://blog.zeroplex.tw/2020/11/01/benfords-law/ -v

Note: Unnecessary use of -X or --request, GET is already inferred.
* Host blog.zeroplex.tw:443 was resolved.
* IPv6: (none)
* IPv4: 172.104.77.215
*   Trying 172.104.77.215:443...
* Connected to blog.zeroplex.tw (172.104.77.215) port 443
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / secp521r1 / id-ecPublicKey
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=blog.zeroplex.tw
*  start date: Aug  7 04:01:59 2025 GMT
*  expire date: Nov  5 04:01:58 2025 GMT
*  subjectAltName: host "blog.zeroplex.tw" matched cert's "blog.zeroplex.tw"
*  issuer: C=US; O=Let's Encrypt; CN=E5
*  SSL certificate verify ok.
*   Certificate level 0: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384
*   Certificate level 1: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://blog.zeroplex.tw/2020/11/01/benfords-law/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: blog.zeroplex.tw]
* [HTTP/2] [1] [:path: /2020/11/01/benfords-law/]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [origin: https://zeroplex.tw]
> GET /2020/11/01/benfords-law/ HTTP/2
> Host: blog.zeroplex.tw
> User-Agent: curl/8.5.0
> Accept: */*
> Origin: https://zeroplex.tw
  1. blog.zeroplex.tw:443 was resolved:處理 domain,這步驟相同
  2. 連線到伺服器,這步也相同
  3. TLSv1.3 (OUT), TLS handshake:SSL handshake,這步會透過 TLS 協定來建立加密連線,並且透過 ca-certificates.crt 根憑證來判斷網站的憑證是否正確
  4. 送出 request,這部相同,只是資料透過前一步驟的加密連線來傳輸

到這邊,知道除了 URL 以外,header 和 body 都是建立加密連線以後才送出,所以敏感的資料最好是放在 header 和 body,避免被竊聽。

接下來討論 HTTPS 憑證。

憑證

HTTP 中的憑證,指的是 SSL certification。

HTTPS 中的憑證類似「執照」,需要經過審核、確認無誤以後才會頒發,而且會有期限,並不是隨便拿、隨便有的東西。

經過審核以後,憑證會被標示為「受信任」,這個時候,其他使用者連線到你的網站時,瀏覽器才會標示為安全 (綠色鑰匙,或沒有警告)。

標記為安全的憑證,一定是安全的嗎?並不是。

憑證已審核通過後,僅表示審核當下是被判定是沒問題的。若網站有漏洞,且漏洞被惡意人士利用,作為詐騙或是用來散佈惡意程式,通過回報來讓憑證管理機關了解該網站已有安全疑慮,主管機關會撤銷原本簽署的憑證 (徹照),使用者的瀏覽器便會警告該網站的憑證有問題。回報、到主管機關撤銷憑證之間,會有一段時間憑證仍然被標示為正常,這段時間就必須由使用者自己來判斷是否安全、可信任。

那標示為有問題的憑證,真的就一定有問題嗎?也不是。

憑證被標示有問題,可能只是憑證沒有通過主管機關審核而已。若只是為了自己的伺服器與使用者之間,透過加密連線來保障內容不會被竊聽,可以自己產生的憑證不需要透過主管機關審核,常見的案例就是 wifi 分享器、伺服器設定頁面,都會走 HTTPS 加密連線,但是憑證都顯示為不安全 (沒有過審核)。

以下圖片,是 ASUS 無線網路分享器自己產生的憑證,被瀏覽器標示為不安全:

ASUS 分享器的憑證被瀏覽器標示為不安全
圖一:ASUS 分享器的憑證被瀏覽器標示為不安全

人權

人權是大哉問,我對人權的了解程度還不適合來討論這個議題,不過有人提到了我要講一下。

台灣的憲法,保障「人民有秘密通訊之自由」,這是基本人權,和居住、安全一樣,是基本的權力,不是選擇性保障的權力。

所以不使用 HTTPS 而是使用 HTTP,指保障了電池使用時間 (處理器不需要加密、解密比較省電),反而讓使用者多了一個不安全的管道而已。

HTTPS 不代表一定安全,但是一定會比 HTTP 安全。使用 HTTPS 才能讓伺服器、使用者避開已知的問題。


ps1. 不知道作者會不會看到,覺得應該還是寫一下,如果是為了「安全」,你不應該使用 Internet Explore 當作範例,因為瀏覽器本身就不安全

ps2. 如果架網站只是為了從 Google 或 Facebook 等大公司取回自己的權力,那架網站其實只是假議題,公司掌握了超過半數的使用者,他們只要認定你有問題你就有可能讓你從網路上消失,再說你要怎麼確認你的網站不是跑在大公司的伺服器上、網路傳輸優先順序沒有被調低? (網路中立) 詳細內容請參考「數位帝國」(ISBN:9786267523230)

ps3. 並不是大公司推廣的東西百害無一利,如果 Google 他們沒有推出 SPDY 現在搞不好沒有 HTTP 2

Tags:網路架站, 資訊學習

在 Docker 安裝、運行 Mastodon

Posted on 2022 年 11 月 20 日2023 年 1 月 19 日 By 日落 在〈在 Docker 安裝、運行 Mastodon〉中尚無留言

以下是 Mastdodon v4.0.2 在 Linux 上的安裝步驟。不同版本可能會有一些差異,請自行調整。

若沒有特別需求,Mastodon 也可以透過代理商安裝、運行,不必自行架設伺服器。

硬體需求

我自己是在 Raspberry Pi 4 上測試的,Pi 4 跑得起來只是比較慢了一些,若你的硬體配備比 Pi 4 好的話,其實沒什麼需要擔心的。

  • 雙核心處理器,建議時脈在 2 GHz 以上
  • 記憶體至少 2 GB 4 GB (隨著資料量增加,使用的記憶體也會增加)
Mastodon 運行時的 docker stats
Mastodon 運行時的 docker stats

More “在 Docker 安裝、運行 Mastodon” »

Tags:Linux, Mastodon, 網路架站

httpstat 讓 HTTP response 連線檢測更簡單

Posted on 2022 年 7 月 14 日2022 年 7 月 14 日 By 日落 在〈httpstat 讓 HTTP response 連線檢測更簡單〉中尚無留言

httpstat 可以直接在 terminal 中檢視建立 HTTP request 到收到 response 耗費的時間:

  • DNS lookup
  • TCP connection
  • TLS handshake
  • server processing
  • content transfer
httpstat example
Tags:Linux, 網路架站

肥吱吱的 WAMP

Posted on 2022 年 3 月 22 日2022 年 3 月 22 日 By 日落 在〈肥吱吱的 WAMP〉中尚無留言

在 WAMP 和 WNMP 之間作選擇,但不曉得為什麼 WAMP 的安裝檔可以比擬中型遊戲。

看了才知道裡面包了一堆用不到的東西:

真的是包山胞海,還有一些套件被強制要安裝 ….

Tags:網路架站

在 Laravel 建立並自動更新 sitemap.xml

Posted on 2022 年 2 月 17 日2022 年 2 月 17 日 By 日落 在〈在 Laravel 建立並自動更新 sitemap.xml〉中有 1 則留言

sitemap.xml 應該算是 SEO 中相當重要的一個檔案,告訴搜尋引擎到底網站中有哪些資源是公開瀏覽的,可惜 Laravel framework 並沒有支援這項功能,必須透過其他工具達成。

以下介紹二個目前看到比較欣賞的解決方法。

More “在 Laravel 建立並自動更新 sitemap.xml” »

Tags:Laravel, PHP, 網路架站

文章分頁

1 2 ... 12 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.