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

我在debian 7.3上configurationvsfptd,我试图使用ssl。 我使用这个命令生成certficates:

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私钥

我已经检查了权限configuration良好,我不知道如何解决这个问题。 请帮忙吗?

我今天在NetScaler(基于BSD的networking设备,openssl的旧版本比创build密钥的时候)有一个类似的问题,虽然没有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在这里可以提供很多信息。

似乎我find了问题的根源

我已经运行你的configurationstrace

 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无法findssl证书 – /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私钥

还要检查path和名称给你的私人密钥

PS你总是可以用strace工具debuggingvsftpd

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