cURL 讀取雙向 ssl 認證 Web Server 網頁方式

  • Server 端的 RootCA 是 RootCA.crt
  • Server 端測試網址 : https://mail.ichiayi.com/t.txt
  • Client 端的憑證是 ClientCA.crt
  • Client 端的密鑰是 ClientCA.key
  • 產生 Client 端 pem 格式含有密鑰的憑證檔
    cat ClientCA.crt > ClientCA.pem
    cat ClientCA.key >> ClientCA.pem
curl --cacert RootCA.crt --cert ClientCA.pem https://mail.ichiayi.com/t.txt

看產生結果

  • 也可以將 RootCA.crt 加入 CA cert bundle (/etc/pki/tls/certs/ca-bundle.crt)
    openssl x509 -inform PEM -in RootCA.crt -out RootCA.pem -text
    cat RootCA.pem >> /etc/pki/tls/certs/ca-bundle.crt

    這樣就可以不需要指定 –cacert

  • 如果出現 ServerCA 的 CN 定義與網址不符,或是 ServerCA 過期等問題,也可以改用 –insecure 來取消 cURL 檢驗 ServerCA 憑證有效性
    curl --cert ClientCA.pem https://localhost/t.txt
    curl --insecure --cert ClientCA.pem https://localhost/t.txt

看產生結果

  • 如果不想因為輸入 ClientCA 密碼中斷自動執行的程序,也可以改寫成 –cert ClientCA.pem:密碼
    curl --insecure --cert ClientCA.pem:mypasswd https://localhost/t.txt

看產生結果

  • 如果擔心這樣將 ClientCA 密碼暴露在外,也可直接在簽發 ClientCA 時就不設定密碼,或者改用 curl 指定參數檔方式提供, Exp. 參數檔為 testcurl.conf,原本語法為
    curl --cacert RootCA.crt --cert ClientCA.pem:mypasswd https://mail.ichiayi.com/t.txt
    • testcurl.conf 內容就定義為
      cacert = "RootCA.crt"
      cert = "ClientCA.pem:mypasswd"
      url = "https://mail.ichiayi.com/t.txt"
    • 將 testcurl.conf 定義只有自己可以讀寫的權限
      chmod 600 testcurl.conf
    • 使用 cURL config 語法為
      curl --conf testcurl.conf

加上 -v 可看到完整的傳輸訊息

  • tech/curl_ssl.txt
  • 上一次變更: 2021/06/13 09:43
  • jonathan