我正在设置 FTP 服务器,需要使用自己的自签名证书作为 FTPS。当我配置 vsftpd 使用我的自签名证书时,它无法启动。
完全相同的设置在 Ubuntu 18.04 中运行无问题(两者都是 AWS EC2 实例)。在两种情况下我都使用 vsftpd 版本 3.0.3。
这就是我创建证书的方式:
mkdir certificates && cd certificates
mkdir ubxtestCA && cd ubxtestCA
CANAME=ubxtestCA
CLIENTNAME=ubxtestclient
SERVERNAME=ubxtest.ddns.net
openssl req -new -x509 -days 365 -extensions v3_ca -keyout $CANAME.key -out $CANAME.crt &&
openssl genrsa -out $CLIENTNAME.key 1024 &&
openssl req -out $CLIENTNAME.csr -key $CLIENTNAME.key -new &&
openssl x509 -req -in $CLIENTNAME.csr -CA $CANAME.crt -CAkey $CANAME.key -CAcreateserial -out $CLIENTNAME.crt -days 365 &&
openssl genrsa -out $SERVERNAME.key 1024 &&
openssl req -out $SERVERNAME.csr -key $SERVERNAME.key -new &&
openssl x509 -req -in $SERVERNAME.csr -CA $CANAME.crt -CAkey $CANAME.key -CAcreateserial -out $SERVERNAME.crt -days 360
我的部署过程如下:
- 部署 AWS EC2 实例
- sudo apt 更新
- 创建证书
- sudo apt 安装 vsftpd
- 编辑 /etc/vsftpd.conf 将 rsa_cert_file 和 rsa_private_key 更改为我的新证书
- sudo systemctl 重新启动 vsftpd
- sudo systemctl 状态 vsftpd
重新启动 vsftpd 后状态显示:
- vsftpd.service:主进程已退出,代码=已退出,状态=2/INVALIDARGUMENT
如果我将 vsftpd snakeoil 证书复制到与我自己的证书相同的目录中,并在 vsftpd.conf 文件中指向这些证书,这也会起作用。
如果我在 Ubuntu 18.04 上遵循完全相同的流程,我不会收到任何错误,并且我的证书可以正常工作(客户端能够验证服务器身份)。
答案1
我发现了问题。
由于某种原因,VSFTPD(在 Ubuntu 20.04 上)无法使用采用 1024 位密钥的证书。将我的示例中生成的密钥更改为 2048 位后,它就可以正常工作了。
奇怪的...
更新 10/7/20:正如评论中所建议的,以下是我如何确定此问题根源的详细信息:
我将 vsftpd 附带的有效 snakeoil 证书与我的证书进行了比较。这是通过以下命令完成的:
openssl x509 -in <certificate_file> -text -noout
我每次只更改证书的一个方面以匹配 snakeoil 证书,直到 vsftpd 错误消失。我尝试将主题更改为仅包含 CN 字段(删除 C、ST、L、O、OU 和 emailAddress 字段)。我还将证书从版本 1 更改为版本 3。最后将使用的 RSA 密钥更改为 2048 位,使 vsftpd 能够成功启动。