Transport Layer Security (TLS) 是一种密码协议,可以在客户机和服务器之间提供安全的通信。当服务器和客户机进行通信时,TLS 确保第三方无法窃取或篡改任何消息。TLS 的前身是 Secure Sockets Layer (SSL)。这使系统上的任何用户都可以安全地交换文件,只要通信的对方也提供这个扩展即可。
您可能会觉得奇怪,既然 openSSH 已经提供了文件传输协议 (FTP) 的安全版本 (sftp),为什么要用一种新方法保护 FTP?尽管只使用安全 FTP 而不使用安全 telnet 可能不是最合适的方法,但是在无法使用 OpenSSH 的环境中,这种方法实际上是一种明智的替代方案。例如,如果您最信任的系统在一个专用的隔离的网络上运行,那么使用 telnet 在这个网络区中进行远程访问(或从控制台工作)是非常合适的。但是,即使在这样的环境中,也很可能需要在这个安全区中传出数据或传入数据,这就可以用安全 FTP 来完成。
另一个场景是已经在使用 OpenSSH,但是仍然必须与不支持 OpenSSH(因此也不支持 scp 和 sftp)的外部系统交换数据。这种遗留系统常常提供 “FTP via SSL” (常常称为 ftps)。
TLS 依赖于 Secure Socket Layer,因此需要在 AIX 系统上安装 OpenSSL(ftps 依赖于 libssl.a 和 libcrypto.a 库)。可以从 https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=aixbp 获得 IBM 支持的 OpenSSL 的最新版本。
FTP 客户机和服务器之间的安全通信使用证书,其中包含一个公共-私有密钥对。因此,设置 FTP over SSL 的第二个需求是,在内部创建证书或者从商业证书机构导入证书。
在 AIX 和 Windows 之间设置 FTP 需要执行四个步骤:
下面分别讨论这些步骤。
如果还没有商业证书的话,就需要创建在 FTP 服务器和客户机之间进行通信所需的证书。
首先,如果要在 Windows 机器上创建证书,就需要在这台机器上安装 OpenSSL。否则,只需把商业证书导入这台机器。
创建一个根(root)级私有密钥和根级证书请求(包含公共密钥)。
c:>cd c:opensslbin openssl req -newkey rsa:2048 -sha1 -keyout root_key.pem -out root_req.pem Generating a 2048 bit RSA private key ...................................+++ ....+++ writing new private key to 'root_key.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:TX Locality Name (eg, city) []:Austin Organization Name (eg, company) [Internet Widgits Pty Ltd]:IBM Organizational Unit Name (eg, section) []:AIX Common Name (eg, YOUR name) []:windows Email Address []:windows@austin.ibm.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:1234 An optional company name []:ibm |
为根生成自签名的证书(有效期大约 10 年):
openssl x509 -req -days 3650 -in root_req.pem -signkey root_key.pem -out root_cert.pem Signature ok subject=/C=US/ST=TX/L=Austin/O=IBM/OU=AIX/CN=windows/emailAddress=windows@austin.ibm.com Getting Private key Enter pass phrase for root_key.pem: |
可以用以下命令检查根证书,确保一切正常:
openssl x509 -in root_cert.pem -text -noout Certificate: Data: Version: 1 (0x0) Serial Number: a3:fe:9c:32:97:5e:2b:6e Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=TX, L=Austin, O=IBM, OU=AIX, CN=windows/emailAddress=windows@austin.ibm.com Validity Not Before: Nov 12 19:54:40 2008 GMT Not After : Nov 10 19:54:40 2018 GMT Subject: C=US, ST=TX, L=Austin, O=IBM, OU=AIX, CN=windows/emailAddress=windows@austin.ibm.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:da:6f:db:90:e2:ab:31:92:21:1e:a0:11:13:a9: 6e:00:1a:a5:69:cf:29:8f:60:7c:a0:08:ea:c9:0f: b2:81:c2:84:6b:a0:4f:9e:12:bf:99:2d:30:60:c4: e4:c5:f8:2b:db:cd:9b:fc:5e:fe:fb:d8:a0:1c:26: 83:fd:ad:c5:6f:cf:32:70:f8:77:45:cd:f7:7d:a6: 65:5b:5d:82:d3:06:74:b8:0e:4e:d9:e4:63:6f:0a: d1:11:ea:b0:d0:cf:ae:68:2f:e3:5e:17:fc:a6:49: c8:db:73:6c:e5:61:1b:8d:22:0d:46:54:9c:79:16: b1:1b:2b:ef:c1:7b:3c:91:79:56:69:e8:fe:8e:33: 46:6a:cc:17:cb:33:6f:38:6d:5d:f9:5a:57:2f:39: fb:ca:f6:d2:a0:3b:29:08:c0:ed:d0:bc:31:21:0d: 15:72:9b:c2:ac:fc:1d:f8:a0:d6:9c:16:19:43:11: 2a:fb:86:d8:c5:e8:66:11:2d:c9:96:9f:23:1f:ae: 92:5a:6b:97:98:48:a5:a6:61:67:2b:8d:6b:90:c2: df:ac:78:57:c5:25:85:bc:ab:30:2e:65:f3:4e:bb: 7d:a0:33:82:d8:f8:0c:7c:b2:a8:80:e6:9c:85:ec: 77:3c:67:26:10:3a:9d:4b:9f:57:73:44:c2:d3:af: d6:93 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 6b:01:12:d5:91:3f:79:8d:c2:50:e0:ff:bf:52:fd:f0:93:44: dc:c4:ef:5c:f6:4c:71:76:bf:b8:18:32:2b:f3:dd:85:bf:ad: 14:6c:2b:df:a6:06:37:38:c8:5c:3f:bf:a4:39:09:7c:ae:a5: 04:dc:a4:73:4a:b7:db:10:47:c7:c9:c5:65:21:28:01:64:5d: 9e:65:70:05:0a:59:6f:4a:80:53:b0:60:4e:03:6a:ff:c3:69: a6:91:fb:1d:95:38:c4:e3:85:21:0a:3b:17:7f:7d:3e:4a:40: 45:ea:61:ba:fa:a3:2f:13:20:88:e1:43:5e:0b:96:3a:77:df: ca:06:40:f5:09:cc:dd:10:dc:c7:bb:c6:cf:40:8f:e6:5b:e9: 2d:2f:01:6c:49:11:18:ff:89:82:a7:06:15:c9:af:84:19:0f: 04:b7:e8:d9:a6:f2:88:33:6e:cd:ed:bd:ec:72:f2:52:89:33: 07:93:ab:2f:93:50:07:1e:6a:1a:10:b4:61:08:09:11:03:47: 29:4d:d9:86:82:79:d5:c6:0e:f2:3e:4d:e6:7c:0a:15:bd:74: 2a:57:13:b4:aa:69:93:37:74:b0:f6:2b:77:08:cb:ee:77:d3: 33:35:dc:5d:c2:67:97:ec:9c:e7:88:14:e3:06:74:3e:84:42: 36:fe:3b:b8 |
现在,要为 Windows FTP 服务器创建一个 RSA 密钥,但是不使用 PEM 密码;因此,要使用另一个命令。在这种服务器密钥上不使用任何密码是很重要的。否则,在每次使用密钥时,都会要求输入密码(在使用 ftpd 时这是不可能实现的)。
openssl genrsa 2048 Loading 'screen' into random state - done Generating RSA private key, 2048 bit long modulus ................................................................................ .......+++ ............+++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAveC0u4iRBje4YsosQ9/rS7g2ucrlPR7tDQ/NZCdSuFg3RX3c j1ZxSmDDHbwkt1u6FSkzBvWhNkZ9SGxRZdChnsdOhXER9L0gAeBgIApuZvcLc9iN KVJb7GpvvqWYgJnLtTBVRN6aaKKIKSRG1NIUihzrET/+9XK+u6rGZN5aqhrllrWg uG4e02PAo4ZB5/iStOPFmAvQSifMTsKMX518U1tgBXCtckw7X+tj+1Bdksx3B+1R OGRwUgM02UkuIOY70j6mxiNDgANzrS8NrM6RhuylbULa0BaOf01Il+716qgjSy7p AQFLle6S6JdFJrAo0DA43bEKSDcXhdR7iSak6QIDAQABAoIBAQCNQMby4+uPRpBi 3agEbmXqlIYRvUDAMWuD1gejxCUjgmzLw4/7CgGJpWZBjp950EEkUNvnB4AAknvN DteW+JfjOL3PQ4hqGu/etX6NF3V+H7ZjXevVm7FKtPugRiynLsJ+bhBhBYC06oSE proSxJ4HCPBOit8u1UfS8H5at5eXBtbHBhsjfL5CUuGzVx2e9z1TqoujYdprtLyL mmCXUrkI4GuWisZpLRj7gTRAQ3NBYL1U01oKOP3/53mg0RnzPSUNaJ104hrk7j4G emKVlgTnk9iTrBChjMpqRSEsuZ3J37LgrdpUHxtUiFG/UamfNwLTBlsiWbPKnLDz CW6Wr1uhAoGBAOl43WQQxIfF2BZmX7AnenEPHcAtq4Wa0mQbNNX+9kWRGxwQe+zs kCCbNKcfamhxMZijcQlX2CS5YSs9QxT5aa2cy/QVprSrnwlmfTTaxVfWL5FTsp84 4eyHlSTj7F79Nq7lhJjX1TRmje2/Oh6h0L+URtXKE/WJXJgP04Iv0/flAoGBANAy /Y8jLyGLM/Rj5czgRt60d1CGKpOZvG1rP++PlsF/txGbTRZdEyRPsT8iqQopbcKb eAM1cDkbx+4dTnNyM036Ow4xgJTMuFRIJEynhaA920UlNNhqIqS5WiGSc/lHVHdN 2qWtI7vtWuuWgCswDBBpEsNMzS2XRSJthDSL4OC1AoGAP+R6udq43esvwpmLkDqN kIkxfBlDelGvSAQGBpY6sTkPsTN1ppXqr3GqDB5V0XVAvGPmGEd4+DvfMqUWSZQj 7oYdbpPKRmE9KaZpl2BTZ0FPTTcZh+daNI+6KhlR44DqSRy4l9dhGnECYFDXx/BC n1sls3YU1jocI+UY3eTW3l0CgYAwIcmqwLiRqaveMQYcYjEgJVp8HDhVnTIJncTP LkPtAgihomSk6emV+HKCpRGtTryYQ/bvzvfdzAVhkBbl653exh3G/zy5qcZnfbIe oo/q5sH9b0eTTJ4rtMoYftIe7BWj6zTEHo3nUU02r7l7woTXemMjEWtRwenytpzc xQW9DQKBgQCy04VN+RfizwuGP0fe84xY7fzuWOH6jkNIt2kx91TFlJ0K8iEtndju kIjqHbDlADjQ5voUrAGAs80/wDpphrgt4iUjWDZw+MJuxTtxfiiEPMemZ50ee8on fu6Faz8OBaUz5sJK87oj0YoYlsKF4gzfO+bh74RWxulapE4FPbK5SA== -----END RSA PRIVATE KEY----- |
把上面的密钥内容复制到文件 server_key.pem 中。
接下来,为刚才创建的密钥创建一个证书请求(包含它的公共密钥):
openssl req -new -key server_key.pem -out server_req.pem You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:TX Locality Name (eg, city) []:Austin Organization Name (eg, company) [Internet Widgits Pty Ltd]:IBM Organizational Unit Name (eg, section) []:AIX Common Name (eg, YOUR name) []:server Email Address []:server@austin.ibm.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:1234 An optional company name []:ibm |
接下来,用根 CA 的私有密钥和自签名的公共密钥对服务器密钥请求进行签名。这会创建服务器证书(同样,有效期大约为 10 年):
openssl x509 -req -days 3650 -in server_req.pem -CA root_cert.pem -CAkey root_key.pem -CAcreateserial –out server_cert.pem Signature ok subject=/C=US/ST=TX/L=Austin/O=IBM/OU=AIX/CN=server/emailAddress=server@austin.ibm.com Getting CA Private Key Enter pass phrase for root_key.pem: |
为了更容易配置服务器和分发密钥文件,可以把服务器密钥、服务器证书和根证书放在一个文件中(OpenSSL 支持这种做法)。因此,把这三个文件组合成一个文件。应该用相应的文件权限保护这个文件。
Copy the contents of server_key.pem server_cert.pem root_cert.pem into the file server.pem |
以 .pfx 格式导出服务器证书。
openssl pkcs12 -export -out server.pfx -in server.pem -name "server cert pfx" Enter Export Password: Verifying - Enter Export Password: |
现在,已经有了 Windows 能够接受的 .pfx 格式的服务器证书。一定要把这个证书添加到 Microsoft® Management Console 的可信证书存储库中。如果不这么做,这个证书就是不可信的。
可以通过 Start -> Run 并输入 mmc 访问 Microsoft Management Console (MMC)。
MMC 有一个 snap-in 形式的添加证书的选项。
把 Snap-in "certificate" 添加到控制台中之后,会看到下面的证书类别。选择可信的根证书或任何其他证书类别,把刚才创建的服务器证书导入到其中。
导入证书操作会打开 Certificate Import 向导,通过这个向导导入证书。
现在已经把用于 FTP 的 OpenSSL 证书转换为 Windows 机器上的可信证书了。
现在,打开 Internet Information Services (IIS) 管理程序,把这个可信证书添加到 ISS 服务器证书数据库中,这样 IIS 的各种服务(包括安全 FTP)就可以使用它了。
通过把服务器证书导入到存储库中,安全 FTP 服务就可以使用它了。另外,这个证书是可信的。成功地添加证书之后,必须在 IIS 管理程序中 ‘应用’ 修改,从而让这些修改生效。
为了在 Windows 端设置 FTP,必须打开 Internet Information Services (IIS) 的控制台。可以通过 Start -> Administrative Tools -> Internet Information Services (IIS) Manager 访问 IIS。
创建一个用于此用途的新站点,工作区域将创建与 FTP 相关的服务。在这里,创建一个名为 ssl_ftp_site 的站点。
可以指定这个 FTP 服务器需要关联的 IP 地址和端口。在这一步中,有一个选项要求您指定证书。如果已经创建和准备好了证书,现在就可以指定它;否则,可以以后再配置。
这一步配置 FTP 服务器身份验证模式、允许的用户以及他们的读/写权限,从而完成 IIS 中 FTP 站点的配置。
右边面板中的 “Manage FTP Site” 部分可以用来停止或运行服务。要想让任何修改生效,必须停止并重新启动服务器。
现在,必须设置这个站点的 FTP SSL 设置,可以在 FTP 站点的工作空间中使用这些设置。
同样,不要忘记停止并重新启动服务器,从而让修改生效。
使用这种自签名的证书还需要完成另一个安全步骤:需要把根 CA 的证书复制到每个客户机上,而且对于任何希望使用加密的经过身份验证的 FTP 会话的用户,需要在他们的 ~/.ftpcnf 文件中引用这个证书。
在用户的 .ftpcnf 文件中修改以下行,从而指向 CA 证书:
CA_PATH ./root_cert.pem |
无论目标主机是否启用了 TLS,都可以使用 /usr/bin/ftp 连接任何远程系统上的 FTP 守护进程。在服务器上完成 TLS 设置之后,可以使用以下命令在服务器上传出或传入文件。
# ftp -s –M remote_host |
这会建立一个加密的会话,而不需要在客户端做任何修改。但是,如果证书是自签名的,客户机就不得不盲目地信任服务器,所以 FTP 命令会显示在 TLS 握手期间接收的证书的最重要数据,由用户决定是否要连接。
ftp –s remote_host 命令只适用于 AIX 机器之间的连接。要想在 AIX 和非 AIX 机器之间使用安全 FTP,必须使用 ftp –s –M remote_host 命令。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论1 条评论
2012-10-26 09:18