在异类环境中保护文件传输

使用 AIX V6.1 安全特性

在日常计算机环境中,文件传输是一项重要的基本活动。在文件传输期间出现的安全问题会导致泄露重要的数据。因此,保护 FTP 是非常重要的。IBM® 在 AIX® V6.1 中引入了一种基于 OpenSSL 的安全 FTP(和 ftpd),它使用 Transport Layer Security (TLS) 对文件传输的命令和数据通道进行加密。本文解释这个 AIX V6.1 特性的优点,以及在 AIX 和已经支持此特性的其他异类系统之间使用它的方法。本文主要讨论对 Windows® 服务器使用 AIX 安全 FTP。

Anto A. John, 系统软件工程师, WSO2 Inc

/developerworks/i/p-ajohn.jpgAnto John 是在印度班加罗尔 IBM India Software Labs 工作的 AIX 开发支持专家。他主要从事 AIX 安全组件(安全库)、装载模块(LDAP 和 Kerberos)和新的 AIX 6.1 安全特性 (EFS)。在过去三年,他一直研究 AIX 安全组件以及 OpenSSH 和 OpenSSL 等开放源码组件。他毕业于 BITS Pilani,获得了计算机科学工程硕士学位。



2009 年 6 月 01 日

简介

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)。

安全 FTP 的需求

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

在 AIX 和 Windows 之间设置 FTP 需要执行四个步骤:

下面分别讨论这些步骤。

创建证书

如果还没有商业证书的话,就需要创建在 FTP 服务器和客户机之间进行通信所需的证书。

首先,如果要在 Windows 机器上创建证书,就需要在这台机器上安装 OpenSSL。否则,只需把商业证书导入这台机器。

创建一个根(root)级私有密钥和根级证书请求(包含公共密钥)。

清单 1. 根级证书请求
c:\>cd c:\openssl\bin\
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 年):

清单 2. 创建根证书
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:

可以用以下命令检查根证书,确保一切正常:

清单 3. 根证书
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 时这是不可能实现的)。

清单 4. Windows FTP 服务器的密钥
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 中。

接下来,为刚才创建的密钥创建一个证书请求(包含它的公共密钥):

清单 5. 创建的密钥的证书请求
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 年):

清单 6. 创建服务器证书
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 支持这种做法)。因此,把这三个文件组合成一个文件。应该用相应的文件权限保护这个文件。

清单 7. 单一服务器文件
Copy the contents of  server_key.pem server_cert.pem root_cert.pem 
into the file server.pem

以 .pfx 格式导出服务器证书。

清单 8. 把服务器证书转换为 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 形式的添加证书的选项。

图 1. Microsoft Management Console
Microsoft Management Console
图 2. 添加 snap-in
添加 snap-in

把 Snap-in "certificate" 添加到控制台中之后,会看到下面的证书类别。选择可信的根证书或任何其他证书类别,把刚才创建的服务器证书导入到其中。

图 3. 导入证书
导入证书

导入证书操作会打开 Certificate Import 向导,通过这个向导导入证书。

图 4. Certificate Import 向导
Certificate Import 向导

现在已经把用于 FTP 的 OpenSSL 证书转换为 Windows 机器上的可信证书了。

图 5. 在 snap-in 中添加的证书
在 snap-in 中添加的证书

现在,打开 Internet Information Services (IIS) 管理程序,把这个可信证书添加到 ISS 服务器证书数据库中,这样 IIS 的各种服务(包括安全 FTP)就可以使用它了。

图 6. 服务器证书存储库
服务器证书存储库
图 7. 导入到服务器证书存储库中
导入到服务器证书存储库中

通过把服务器证书导入到存储库中,安全 FTP 服务就可以使用它了。另外,这个证书是可信的。成功地添加证书之后,必须在 IIS 管理程序中 ‘应用’ 修改,从而让这些修改生效。

图 8. 导入的证书
导入的证书

在 Windows 服务器上设置 FTP 服务

为了在 Windows 端设置 FTP,必须打开 Internet Information Services (IIS) 的控制台。可以通过 Start -> Administrative Tools -> Internet Information Services (IIS) Manager 访问 IIS。

图 9. Internet Information Services (IIS) 管理程序
Internet Information Services (IIS) 管理程序

创建一个用于此用途的新站点,工作区域将创建与 FTP 相关的服务。在这里,创建一个名为 ssl_ftp_site 的站点。

图 10. 添加 FTP 站点
添加 FTP 站点

可以指定这个 FTP 服务器需要关联的 IP 地址和端口。在这一步中,有一个选项要求您指定证书。如果已经创建和准备好了证书,现在就可以指定它;否则,可以以后再配置。

图 11. 绑定和 SSL 设置
绑定和 SSL 设置

这一步配置 FTP 服务器身份验证模式、允许的用户以及他们的读/写权限,从而完成 IIS 中 FTP 站点的配置。

图 12. 身份验证和授权信息
身份验证和授权信息

右边面板中的 “Manage FTP Site” 部分可以用来停止或运行服务。要想让任何修改生效,必须停止并重新启动服务器。

图 13. 站点准备就绪
站点准备就绪

现在,必须设置这个站点的 FTP SSL 设置,可以在 FTP 站点的工作空间中使用这些设置。

图 14. FTP SSL 设置
FTP SSL 设置

同样,不要忘记停止并重新启动服务器,从而让修改生效。

在 AIX 客户机上配置 FTP

使用这种自签名的证书还需要完成另一个安全步骤:需要把根 CA 的证书复制到每个客户机上,而且对于任何希望使用加密的经过身份验证的 FTP 会话的用户,需要在他们的 ~/.ftpcnf 文件中引用这个证书。

在用户的 .ftpcnf 文件中修改以下行,从而指向 CA 证书:

CA_PATH ./root_cert.pem

使用安全 FTP 传输数据

无论目标主机是否启用了 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 命令。


结束语

本文讨论了安全 FTP 设置的各个方面,包括 Windows 服务器端上的 FTP 服务配置和客户端上的 FTP 配置。这个特性在 AIX 操作系统中增加了一个非常重要的安全功能,有助于利用其他操作系统上的类似功能,帮助用户在异类环境中安全地传输文件。

参考资料

学习

获得产品和技术

  • 下载 openssl、lsof 等 AIX Web Download Pack
  • 下载 IBM 产品评估版,试用这些来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=392807
ArticleTitle=在异类环境中保护文件传输
publish-date=06012009