Ssl

使用客戶端身份驗證證書 (OpenSSL) 調試 curl FTPS 連接

  • March 29, 2017

**(從 StackOverflow 移出)**我被要求使用客戶端身份驗證證書設置 FTPS 連接。我是客戶端,連接到伺服器。我在防火牆後面的 Windows 7 工作站上,儘管此連接最終將在專用的 CentOS VM 上使用。其他一些資訊:

  • 僅 TLS 1.2
  • 僅被動模式
  • 我的 WAN IP 已列入白名單
  • 我現在正在連接到一個測試 URL
  • 沒有出站防火牆(只有入站規則)
  • 密鑰應以 PEM 格式發送

我從 Comodo 購買了證書,並使用 IE10 生成了證書。我從 IE 導出了完整的證書,帶有私鑰和擴展屬性,格式為 .pfx。

我使用 OpenSSL 編寫了一個小批處理文件來從 .pfx 中提取必要的部分:

::Extract the private key from the PFX
openssl pkcs12 -in comodo.pfx -nocerts -out encrypted.key
::Extract unencrypted private key
openssl rsa -in encrypted.key -out decrypted.key
::Extract the public cert in Base64 from the PFX
openssl pkcs12 -in comodo.pfx -clcerts -nokeys | openssl x509 -out comodo.cer
::Extract the chain bundle from the PFX
openssl pkcs12 -in comodo.pfx -nodes -nokeys -cacerts | openssl x509 -out comodo.crt

使用提取的關鍵部分,我一直在嘗試各種 curl (v7.46.0) 命令來連接到 FTPS 伺服器。連接不斷失敗。我的最新嘗試如下。錯誤幾乎總是相同的。

curl -3 -k -v --ftp-ssl --tlsv1.2 --ftp-ssl-reqd --ftp-pasv --key decrypted.key --cacert comodo.crt --cert comodo.cer --user REMOVED:REMOVED ftp://ftps.REMOVED/

輸出的一個例子是:

> curl -3 -v -k --user REMOVED:REMOVED --ftp-ssl --tlsv1.2 --ftp-ssl-reqd --ftp-skip-pasv-ip --cert comodo.cer --key priv.pem ftp://ftps.REMOVED/
*   Trying REMOVED_IP.
* Connected to ftps.REMOVED (REMOVED_IP) port 21 (#0)
< 220 Service ready for new user.
> AUTH SSL
< 234 Command AUTH okay; starting SSL connection.
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to ftps.REMOVED:21
* Closing connection 0 curl: (35) Unknown SSL protocol error in connection to ftps.REMOVED:21
>pause
Press any key to continue . . .

奇怪的是,如果我連接 FileZilla,我似乎可以通過 TLS 握手,但是當我嘗試上傳文件時會遇到不同的錯誤。由於這種聯繫最終將通過 curl 建立,因此我專注於這種方法。

我已經嘗試了一個多星期。伺服器管理員已從我的提供商處購買了證書,並且可以毫無問題地連接。我被這個難住了。任何幫助將不勝感激。一般 curl / ftps 調試技巧也將不勝感激。

這最終成為一個非 FTP 問題。客戶端系統只允許一個 CA 證書與一個使用者關聯,因此我們的一些虛擬使用者阻止了 CA 密鑰被接受。不過感謝大家的幫助。

引用自:https://serverfault.com/questions/820851