Следующий этот Учебник Мне удалось добавить к серверу возможность подключения FTPS.
Следуя шагу 6 в учебнике:
6.1 генерировать сертификат
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa: 2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
6.2 добавить сертификат в /etc/vsftpd.conf
rsa_cert_file = / etc / ssl / private / vsftpd.pem
rsa_private_key_file = / etc / ssl / private / vsftpd.pem
Он работает для FileZilla, но с curl кажется, что я не могу повторно использовать тот же сертификат, я загрузил файл сертификата с сервера и использую его так
$ curl -v --cert ~/.ssh/vsftpd.pem --user MYUSER:PASSWORD ftp://SERVER-IP
* Trying SERVER-IP...
* TCP_NODELAY set
* Connected to SERVER-IP (SERVER-IP) port 21 (#0)
< 220 (vsFTPd 3.0.3)
> USER MYUSER
< 530 Non-anonymous sessions must use encryption.
* Access denied: 530
* Closing connection 0
curl: (67) Access denied: 530
С FTPS
$ curl -v --cert ~/.ssh/vsftpd.pem --user MYUSER:PASSWORD ftps://SERVER-IP
* Trying SERVER-IP...
* TCP_NODELAY set
* Connection failed
* connect to SERVER-IP port 990 failed: Connection refused
* Failed to connect to SERVER-IP port 990: Connection refused
* Closing connection 0
curl: (7) Failed to connect to SERVER-IP port 990: Connection refused
Как я могу использовать один и тот же сертификат для FileZilla и curl (поскольку git-ftp использует curl) для загрузки файлов по FTPS?
Обновить
Добавление параметра --ftp-ssl
:
* Trying SERVER-IP...
* TCP_NODELAY set
* Connected to SERVER-IP (SERVER-IP) port 21 (#0)
< 220 (vsFTPd 3.0.3)
> AUTH SSL
< 234 Proceed with negotiation.
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /usr/local/etc/openssl/cert.pem
CApath: /usr/local/etc/openssl/certs
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, unknown CA (560):
* SSL certificate problem: self signed certificate
* Closing connection 0
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Из-за того, что curl на macOS работает с базой данных в приложении Keychain Access, инструкции отличаются от тех, которые необходимы для Linux, я задокументировал инструкции Вот
Создать сертификат и ключ SSL
$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout ~/.ssh/vsftpd.key -out ~/.ssh/vsftpd.crt
Добавьте сгенерированный сертификат в приложение Keychain Access.
$ security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.ssh/vsftpd.crt
Загрузите сертификат и ключ на сервер и скопируйте файлы в /etc/ssl/private/
Следуйте описанным шагам Вот, на шаге 6 используйте уже созданные сертификаты вместо создания новых
rsa_cert_file=/etc/ssl/private/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
После запуска vsftpd на сервере установите git-ftp
$ brew install git-ftp
Добавьте настройки сервера, используя ftpes для протокола
$ git config git-ftp.url "ftpes://<SERVER-IP>/path/to/repository/"
$ git config git-ftp.user "<FTP-USER>"
$ git config git-ftp.password "<FTP-PASSWORD>"
$ git config git-ftp.cacert "~/.ssh/vsftpd.crt"
Инициализировать git-ftp, и в этом случае репозиторий будет загружен в процессе инициализации.
$ git ftp init -v
После добавления дополнительных коммитов в репозиторий отправьте изменения в репозиторий ftp.
$ git ftp push -v
параметр локонов --cert
используется для предоставления сертификата аутентификации клиента. Пока вы не аутентифицируетесь с помощью клиентских сертификатов, вам это не нужно.
Для использования ftps используйте --ftp-ssl
параметр.