为多个域设置基于 SSL 的 FTP

为多个域设置基于 SSL 的 FTP

我正在使用 VSFTPD 在 CentOS 上通过 SSL 设置 FTP 访问,但遇到了一些问题。

我正在使用一个带有多个虚拟服务器的 Apache,每个域一个。

按照我在互联网上找到的一些指南,我设法设置了这个配置文件,并将其与命令 openssl 一起使用来生成证书和密钥:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
default_bits = 2048

[req_distinguished_name]
countryName                     = Country Name (2 letter code)
countryName_default             = ES
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = My Province

localityName                    = Locality Name (eg, city)
localityName_default            = My City

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = My Company Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = WebServices

commonName                      = Common Name (eg, YOUR name)
commonName_default              = My Company Ltd
commonName_max                  = 64

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.com
DNS.2 = ftp.myserver.com
DNS.3 = mail.myserver.com
DNS.4 = julian.net
DNS.5 = ftp.julian.net
DNS.6 = mail.julian.net
DNS.7 = smith.org
DNS.8 = ftp.smith.org
DNS.9 = mail.smith.org
IP.1 = 111.112.113.114

我使用以下命令生成证书和密钥:

openssl req -x509 -new -nodes -out certfile.crt -config certificate.conf -keyout keyfile.key -days 365 -newkey rsa:2048

重置 vstfpd 服务后,我使用 FileZila 连接到服务器,它显示以下消息:

“ftp.myserver.com:21 - 主机名与证书不匹配”

如果我将通用名称设置为“myserver.com”,问题就消失了,但是服务器上托管的其他域又会出现同样的问题。

我怀疑我使用了错误的方法,我应该为每个域创建一个不同的证书,但是,说实话,我不知道如何设置 vsftpd.conf 以指向不同的证书,具体取决于域名。

或者,我是否必须将所有域的所有证书存储在一个文件中?

正如您所看到的,我对此还很陌生,因此我非常感谢任何帮助。

答案1

$ openssl req -x509 -new -nodes -out certfile.crt -config certificate.conf \
    -keyout keyfile.key -days 365 -newkey rsa:2048

此命令未使用请求中的扩展。扩展仅针对指定req,即用于创建证书要求但证书不是。这意味着主体备用名称永远不会出现在证书中,因此客户端有理由抱怨不匹配。

要解决此问题,请使用命令行选项指定在证书中也应使用该扩展-extension

$ openssl req -x509 -new -nodes -out certfile.crt -config certificate.conf \
    -keyout keyfile.key -days 365 -newkey rsa:2048 \
    -extensions 'v3_req' 

然后openssl x509 -text可以检查一下:

$ openssl x509 -in certfile.crt -text
     ...
            X509v3 Subject Alternative Name: 
                DNS:myserver.com, DNS:ftp.myserver.com, DNS:mail.myserver.com, DNS:julian.net, DNS:ftp.julian.net, DNS:mail.julian.net, DNS:smith.org, DNS:ftp.smith.org, DNS:mail.smith.org, IP Address:111.112.113.114

相关内容