|
|
|
@ -10,7 +10,11 @@ setup() { |
|
|
|
[ ! -f $BATS_RUN_TMPDIR/failed.skip ] || skip "skipping tests after first failure" |
|
|
|
export CURL_CA_BUNDLE=/root/pebble-ca-bundle.crt |
|
|
|
if [ -n "${VSFTPD_CONF}" ]; then |
|
|
|
cp $VSFTPD_CONF ${VSFTPD_CONF}.getssl |
|
|
|
if [ ! -f "${VSFTPD_CONF}.getssl" ]; then |
|
|
|
cp $VSFTPD_CONF ${VSFTPD_CONF}.getssl |
|
|
|
else |
|
|
|
cp ${VSFTPD_CONF}.getssl $VSFTPD_CONF |
|
|
|
fi |
|
|
|
|
|
|
|
# enable passive and disable active mode |
|
|
|
# https://www.pixelstech.net/article/1364817664-FTP-active-mode-and-passive-mode |
|
|
|
@ -18,10 +22,7 @@ setup() { |
|
|
|
pasv_enable=YES |
|
|
|
pasv_max_port=10100 |
|
|
|
pasv_min_port=10090 |
|
|
|
connect_from_port_20=NO |
|
|
|
_FTP |
|
|
|
|
|
|
|
${CODE_DIR}/test/restart-ftpd start |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
@ -44,6 +45,8 @@ teardown() { |
|
|
|
mkdir -p /var/www/html/.well-known/acme-challenge |
|
|
|
fi |
|
|
|
|
|
|
|
${CODE_DIR}/test/restart-ftpd start |
|
|
|
|
|
|
|
NEW_FTP="false" |
|
|
|
if [[ "$(ftp -? 2>&1 | head -1 | cut -c-6)" == "usage:" ]]; then |
|
|
|
NEW_FTP="true" |
|
|
|
@ -57,8 +60,11 @@ teardown() { |
|
|
|
setup_environment |
|
|
|
init_getssl |
|
|
|
|
|
|
|
# The DOMAIN_PEM_LOCATION creates a *signed* certificate for the ftps/ftpes tests |
|
|
|
cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg |
|
|
|
ACL="ftp:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" |
|
|
|
DOMAIN_PEM_LOCATION=/etc/vsftpd.pem |
|
|
|
CA_CERT_LOCATION=/etc/cacert.pem |
|
|
|
EOF |
|
|
|
if [[ "$FTP_PASSIVE_DEFAULT" == "false" ]]; then |
|
|
|
if [[ "$NEW_FTP" == "true" ]]; then |
|
|
|
@ -98,6 +104,8 @@ EOF4 |
|
|
|
mkdir -p /var/www/html/.well-known/acme-challenge |
|
|
|
fi |
|
|
|
|
|
|
|
${CODE_DIR}/test/restart-ftpd start |
|
|
|
|
|
|
|
NEW_FTP="false" |
|
|
|
if [[ "$(ftp -? 2>&1 | head -1 | cut -c-6)" == "usage:" ]]; then |
|
|
|
NEW_FTP="true" |
|
|
|
@ -144,3 +152,128 @@ EOF3 |
|
|
|
fi |
|
|
|
check_output_for_errors |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@test "Use ftpes (explicit ssl, port 21) to create challenge file" { |
|
|
|
if [[ ! -f /etc/vsftpd.pem ]]; then |
|
|
|
echo "FAILED: This test requires the previous test to succeed" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -n "$STAGING" ]; then |
|
|
|
skip "Using staging server, skipping internal test" |
|
|
|
fi |
|
|
|
|
|
|
|
if [[ ! -d /var/www/html/.well-known/acme-challenge ]]; then |
|
|
|
mkdir -p /var/www/html/.well-known/acme-challenge |
|
|
|
fi |
|
|
|
|
|
|
|
# Restart vsftpd with ssl enabled |
|
|
|
cat <<- _FTP >> $VSFTPD_CONF |
|
|
|
connect_from_port_20=NO |
|
|
|
ssl_enable=YES |
|
|
|
allow_anon_ssl=NO |
|
|
|
force_local_data_ssl=NO |
|
|
|
force_local_logins_ssl=NO |
|
|
|
ssl_tlsv1=YES |
|
|
|
ssl_sslv2=NO |
|
|
|
ssl_sslv3=NO |
|
|
|
require_ssl_reuse=NO |
|
|
|
ssl_ciphers=HIGH |
|
|
|
rsa_cert_file=/etc/vsftpd.pem |
|
|
|
rsa_private_key_file=/etc/vsftpd.pem |
|
|
|
_FTP |
|
|
|
${CODE_DIR}/test/restart-ftpd start |
|
|
|
|
|
|
|
# Always change ownership and permissions in case previous tests created the directories as root |
|
|
|
chgrp -R www-data /var/www/html/.well-known |
|
|
|
chmod -R g+w /var/www/html/.well-known |
|
|
|
|
|
|
|
CONFIG_FILE="getssl-http01.cfg" |
|
|
|
setup_environment |
|
|
|
init_getssl |
|
|
|
|
|
|
|
# Verbose output is needed so the test assertion passes |
|
|
|
# On Ubuntu 14 and 18 curl errors with "unable to get issuer certificate" so disable cert check using "-k" |
|
|
|
if [[ "$GETSSL_OS" == "ubuntu14" || "$GETSSL_OS" == "ubuntu18" ]]; then |
|
|
|
cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg |
|
|
|
ACL="ftpes:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" |
|
|
|
FTPS_OPTIONS="--cacert /etc/cacert.pem -v -k" |
|
|
|
EOF |
|
|
|
else |
|
|
|
cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg |
|
|
|
ACL="ftpes:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" |
|
|
|
FTPS_OPTIONS="--cacert /etc/cacert.pem -v" |
|
|
|
EOF |
|
|
|
fi |
|
|
|
|
|
|
|
create_certificate |
|
|
|
assert_success |
|
|
|
# assert_line --partial "SSL connection using TLSv1.3" |
|
|
|
assert_line --partial "200 PROT now Private" |
|
|
|
|
|
|
|
check_output_for_errors |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@test "Use ftps (implicit ssl, port 990) to create challenge file" { |
|
|
|
if [[ ! -f /etc/vsftpd.pem ]]; then |
|
|
|
echo "FAILED: This test requires the previous test to succeed" |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
if [ -n "$STAGING" ]; then |
|
|
|
skip "Using staging server, skipping internal test" |
|
|
|
fi |
|
|
|
|
|
|
|
# Restart vsftpd listening on port 990 |
|
|
|
cat <<- _FTP >> $VSFTPD_CONF |
|
|
|
implicit_ssl=YES |
|
|
|
listen_port=990 |
|
|
|
connect_from_port_20=NO |
|
|
|
ssl_enable=YES |
|
|
|
allow_anon_ssl=NO |
|
|
|
force_local_data_ssl=NO |
|
|
|
force_local_logins_ssl=NO |
|
|
|
ssl_tlsv1=YES |
|
|
|
ssl_sslv2=NO |
|
|
|
ssl_sslv3=NO |
|
|
|
require_ssl_reuse=NO |
|
|
|
ssl_ciphers=HIGH |
|
|
|
rsa_cert_file=/etc/vsftpd.pem |
|
|
|
rsa_private_key_file=/etc/vsftpd.pem |
|
|
|
_FTP |
|
|
|
${CODE_DIR}/test/restart-ftpd start |
|
|
|
|
|
|
|
if [[ ! -d /var/www/html/.well-known/acme-challenge ]]; then |
|
|
|
mkdir -p /var/www/html/.well-known/acme-challenge |
|
|
|
fi |
|
|
|
|
|
|
|
# Always change ownership and permissions in case previous tests created the directories as root |
|
|
|
chgrp -R www-data /var/www/html/.well-known |
|
|
|
chmod -R g+w /var/www/html/.well-known |
|
|
|
|
|
|
|
CONFIG_FILE="getssl-http01.cfg" |
|
|
|
setup_environment |
|
|
|
init_getssl |
|
|
|
|
|
|
|
# Verbose output is needed so the test assertion passes |
|
|
|
# On Ubuntu 14 and 18 curl errors with "unable to get issuer certificate" so disable cert check using "-k" |
|
|
|
# as I don't have time to fix |
|
|
|
if [[ "$GETSSL_OS" == "ubuntu14" || "$GETSSL_OS" == "ubuntu18" ]]; then |
|
|
|
cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg |
|
|
|
ACL="ftps:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" |
|
|
|
FTPS_OPTIONS="--cacert /etc/cacert.pem -v -k" |
|
|
|
EOF |
|
|
|
else |
|
|
|
cat <<- EOF > ${INSTALL_DIR}/.getssl/${GETSSL_CMD_HOST}/getssl_test_specific.cfg |
|
|
|
ACL="ftps:ftpuser:ftpuser:${GETSSL_CMD_HOST}:/var/www/html/.well-known/acme-challenge" |
|
|
|
FTPS_OPTIONS="--cacert /etc/cacert.pem -v" |
|
|
|
EOF |
|
|
|
fi |
|
|
|
|
|
|
|
create_certificate |
|
|
|
assert_success |
|
|
|
assert_line --partial "200 PROT now Private" |
|
|
|
check_output_for_errors |
|
|
|
} |