最近公司因為使用者需求需要架設 FTP Server,而現在使用 Docker 架設其實非常簡單就一行指令就可以完成了,我們目前使用的是 Pure-FTPd 而 Docker 直接使用 Docker Hub
啟動 Pure-FTPd
簡單的啟動方法其實很簡單只需要一行指令就可以啟動它了docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd
啟動 Pure-FTPd 使用 SSL
轉 pure-ftpd.pem 錯誤
不過在使用上要用 TLS 遇到了一點問題,我目前手上有的 SSL certificate 只有 pfx 檔案,所以需要轉欓,一開始我直接使用 openssl pkcs12
把 pfx 轉 pem,再放入 pure-ftpd 取用會失敗,其實我也不太知道為什麼
openssl pkcs12 -in file.pfx -out pure-ftpd.pem -nodes
分開轉 pure-ftpd-key.pem 與 pure-ftpd-cert.pem
後來我分開轉 cert 與 key 就正常了真是讓我匪夷所思,不過可以正常執行就好了
openssl pkcs12 -in server.pfx -out pure-ftpd-key.pem -nocerts -nodes openssl pkcs12 -in server.pfx -out pure-ftpd-cert.pem -nokeys -clcerts
啟動 Pure-FTPd
啟動 Pure-FTPd SSL 記得更換 ssl 資料夾(/folder_on_disk/private)把它掛載到對應的地方
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e ADDED_FLAGS="--tls=2" -e "PUBLICHOST=localhost" -v /folder_on_disk/private:/etc/ssl/private stilliard/pure-ftpd
查看 run.sh
我後來去看了一下腳本發現它啟動的時候會去檢查 pure-ftpd-key.pem 與 pure-ftpd-cert.pem 再把它合併,所以應該是我哪裡有做錯吧。不過現在可以用就好了 ~
# If TLS flag is set and cert and key are given are given as two files, merge them into one cert if [ -e /etc/ssl/private/pure-ftpd-cert.pem ] && [ -e /etc/ssl/private/pure-ftpd-key.pem ] && [[ "$PURE_FTPD_FLAGS" == *"--tls"* ]] then echo "Merging certificate and key" cat /etc/ssl/private/pure-ftpd-cert.pem /etc/ssl/private/pure-ftpd-key.pem > /etc/ssl/private/pure-ftpd.pem fi
參考資料:
- https://trustzone.com/knowledge-base/split-pfx-file-into-pem-key-files-openss-windows-linux/
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!