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秘密鍵をロードできません
権限が適切に構成されていることを確認しましたが、これを修正する方法がわかりません。何か助けてください?
今日、vsftpdではなく、NetScaler(opensslのバージョンが古いバージョンのBSDベースのネットワークアプライアンス)でも同様の問題がありましたが、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などに変更される場合があります)。
チェックする他の同様のもの(他のソフトウェアの場合)
もう1つの一般的な障害(おそらくまったく当てはまります)は、vsftpdが起動後にユーザーを変更する可能性があることです。一部のソフトウェアはこれが発生した後にキーを読み取ります(例:mysql)、他のソフトウェアは前にそれを読み取ります(例:httpd)。 Straceは、実際に掘り下げたい場合に非常に役立ちます。
問題の根本を見つけたようです
私はあなたの設定で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秘密鍵をロードできません
秘密鍵のパスと名前も確認してください
追伸straceユーティリティで常にvsftpdをデバッグできます
# strace /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf