500 OOPS:SSL:无法加载 RSA 私钥 vsftpd

500 OOPS:SSL:无法加载 RSA 私钥 vsftpd

我正在 debian 7.3 上配置 vsfptd,我正在尝试使用 ssl。我使用以下命令生成证书:

openssl req -x509 -nodes -days 1925 -newkey rsa:2048 -keyout /etc/vsftpd/private/vsftpd2.key -out /etc/vsftpd/certificado/vsfptd3.pem

我的 vsftpd.conf 是这样的:

listen=YES

anonymous_enable=YES

local_enable=YES

write_enable=YES

#anon_upload_enable=YES

anon_mkdir_write_enable=YES

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

connect_from_port_20=NO

#chown_uploads=YES
#chown_username=whoever
#
chroot_local_user=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp-ssl
rsa_cert_file=/etc/vsftpd/certificado/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/private/vsftpd2.key
anon_root=/srv/ftp/anonimo
chown_upload_mode=757
anon_upload_enable=YES
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
listen_port=990
ssl_ciphers=HIGH
require_ssl_reuse=NO

但每次我尝试启动 vsftpd 时都会收到此错误消息:

500 OOPS:SSL:无法加载 RSA 私钥

我检查过权限配置是否正确,但我不知道该如何修复这个问题。有什么可以帮忙的吗?

答案1

今天我在 NetScaler(基于 BSD 的网络设备,其 openssl 版本比我创建密钥的版本要旧)上遇到了类似的问题,尽管不是使用 vsftpd,但我可以说 mysql 也受到这个问题的影响。

您的私钥格式可能与预期格式不同。请尝试以下操作:

mv /etc/vsftpd/private/vsftpd2.key{,.old}
openssl rsa -in /etc/vsftpd/private/vsftpd2.key.old -out /etc/vsftpd/private/vsftpd2.key
diff /etc/vsftpd/private/vsftpd2.key{.old,}

您可能会发现第一行和最后一行明显不同(例如,BEGIN RSA PRIVATE KEY 可能会更改为 BEGIN RSA KEY 或类似的内容)。

其他类似检查事项(针对其他软件)

  • 您的私钥文件中是否有本机行尾?
  • 您是否需要删除尾随的换行符?

另一个常见故障(可能非常适用于您)是 vsftpd 启动后可能会更改用户;某些软件会在发生这种情况后读取密钥(例如 mysql),而其他软件则会在发生这种情况之前读取密钥(例如 httpd)。如果您想深入研究,Strace 可以为您提供非常有用的信息。

答案2

我似乎找到了问题的根源

我已经用你的配置运行了 strace

stat("/etc/vsftpd/vsftpd.conf", {st_mode=S_IFREG|0600, st_size=791, ...}) = 0
getuid()                                = 0
getuid()                                = 0
open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 3
fstat(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
poll([{fd=3, events=POLLIN}], 1, 10)    = 1 ([{fd=3, revents=POLLIN}])
read(3, "\225\f\312\271\276\215\201=\200\237A\337u7\237\201\2001GC\352\371\363\334GT\36/\37\f\33\257"..., 48) = 48
close(3)                                = 0
getuid()                                = 0
open("/etc/vsftpd/certificado/vsftpd.pem", O_RDONLY) = -1 ENOENT (No such file or directory)
fcntl(0, F_GETFL)                       = 0x8402 (flags O_RDWR|O_APPEND|O_LARGEFILE)
fcntl(0, F_SETFL, O_RDWR|O_APPEND|O_NONBLOCK|O_LARGEFILE) = 0
write(0, "500 OOPS: ", 10500 OOPS: )              = 10
write(0, "SSL: cannot load RSA certificate", 32SSL: cannot load RSA certificate) = 32
write(0, "\r\n", 2
)                     = 2
exit_group(1)                           = ?
+++ exited with 1 +++

正如您所看到的,vsftpd 找不到 ssl 证书 - /etc/vsftpd/certificado/vsftpd.pem。

open("/etc/vsftpd/certificado/vsftpd.pem", O_RDONLY) = -1 ENOENT (No such file or directory)

这是因为在生成证书时你使用了不同的名称

-out /etc/vsftpd/certificado/vsfptd3.pem

在 vsftpd.conf 中更正证书(rsa_cert_file)的文件名

500 OOPS:SSL:无法加载 RSA 私钥

还要检查私钥的路径和名称

PS 您始终可以使用 strace 实用程序调试 vsftpd

# strace /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

答案3

不幸的是,错误信息有点笼统,可能有几种不同的根本原因。

在某些系统上(例如 RHEL 8.8),密钥的长度不应为1024但至少为2048。 在我的例子中,我将命令从以下内容更改为:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 \
 -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem

对此:

openssl req -x509 -nodes -days 720 -newkey rsa:2048 \
 -keyout /etc/vsftpd.key -out /etc/vsftpd.pem

我在 Ask Ubuntu 网站上找到了这个提示:https://askubuntu.com/questions/412070/vsftpd-will-not-start-with-ssl-enabled

这对我有用。

相关内容