FreeBSD 使用手册
上一页 | 第14章 　安全 | 下一页

# 14.9 OpenSSL

作者 Tom Rhodes.

许多用户可能并没有注意到 FreeBSD 所附带的 OpenSSL 工具包的功能。 OpenSSL 提供了建立在普通的通讯层基础上的加密传输层； 这些功能为许多网络应用和服务程序所广泛使用。

对 OpenSSL 的一些常见用法包括加密邮件客户的身份验证过程， 基于 Web 的交易如信用卡等等。 许多 ports 如 `www/apache13-ssl`， 以及 `mail/sylpheed-claws` 等等都提供了编译进 OpenSSL 支持的方法。

> 注意: 绝大多数情况下 Ports Collection 会试图使用 `security/openssl` 除非明确地将 `WITH_OPENSSL_BASE` make 变量设置为 “yes”。

FreeBSD 中附带的 OpenSSL 版本能够支持 安全套接字层 v2/v3 (SSLv2/SSLv3) 和 安全传输层 v1 (TLSv1) 三种网络协议， 并可作为通用的密码学函数库使用。

> 注意: 尽管 OpenSSL 支持 IDEA 算法， 但由于美国专利， 它在默认情况下是不编译的。 如果想使用它， 请查阅相应的授权， 如果认为授权可以接受， 则可以在 `make.conf` 中设置 `MAKE_IDEA`。

为应用软件提供证书是 OpenSSL 最为常用的功能之一。 证书是一种能够确保公司或个人有效身份不被伪造的凭据。 如果证书没有被众多 “权威发证机构”， 或 CA 中的某一个确认， 则会产生一个警告。 权威发证机构通常是一家公司， 例如 VeriSign， 它能够通过签署来证明个人或公司证书的有效性。 这个过程是需要付费的， 当然， 这不是使用证书的必要条件； 然而， 这样做会让那些比较偏执的用户感到轻松。

## 14.9.1 生成证书

为了生成证书， 需要使用下面的命令：

    # openssl req -new -nodes -out req.pem -keyout cert.pem
    Generating a 1024 bit RSA private key
    ................++++++
    .......................................++++++
    writing new private key to 'cert.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]:PA
    Locality Name (eg, city) []:Pittsburgh
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
    Organizational Unit Name (eg, section) []:Systems Administrator
    Common Name (eg, YOUR name) []:localhost.example.org
    Email Address []:trhodes@FreeBSD.org

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:SOME PASSWORD
    An optional company name []:Another Name

请注意， 在 “Common Name” 提示后面我们输入的是一个域名。 这个提示要求输入服务器的名字， 这个名字今后将用于完成验证过程； 如果在这里输入域名以外的内容， 那么证书也就失去其意义了。 您还可以指定一些其他的选项， 比如证书的有效期， 以及使用的加密算法等等。 这些选项的完整列表， 可以在 openssl(1) 联机手册中找到。

在您执行前述命令的目录中将生成两个文件。 证书申请， 即 `req.pem`， 可以发给一家发证机构， 它将验证您输入的凭据的真实性， 并对申请进行签名， 再把证书返还给您。 第二个文件的名字将是 `cert.pem`， 它包含了证书的私钥， 应被全力保护； 如果它落入别人手中， 则可以被用来伪造您 (或您的服务器)。

如果不需要来自 CA 的签名， 也可以创建自行签名的证书。 首先， 需要生成 RSA 密钥：

    # openssl dsaparam -rand -genkey -out myRSA.key 1024

接下来， 生成 CA 密钥：

    # openssl gendsa -des3 -out myca.key myRSA.key

然后用这个密钥来创建证书：

    # openssl req -new -x509 -days 365 -key myca.key -out new.crt

上述步骤将在当前目录中生成两个新文件： 一个是权威发证机构的签名文件， `myca.key`； 另一个是证书本身， `new.crt`。 这些文件应该放到同一个目录中， 一般而言， 推荐放到 `/etc`， 并且只允许 `root` 读取。 建议把权限设置为 0700， 这可以通过 `chmod` 工具来完成。

## 14.9.2 使用证书的一个例子

那么有了这些文件可以做些什么呢？ 一个比较典型的用法是用来加密 Sendmail MTA 的通讯连接。 这可以解决用户通过本地 MTA 发送邮件时使用明文进行身份验证的问题。

> 注意: 这个用法可能并不完美， 因为某些 MUA 会由于没有在本地安装证书而向用户发出警告。 请参考那些软件的说明了解关于安装证书的信息。

下面的设置应添加到本地的 `.mc` 文件

    dnl SSL Options
    define(`confCACERT_PATH',`/etc/certs')dnl
    define(`confCACERT',`/etc/certs/new.crt')dnl
    define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
    define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
    define(`confTLS_SRV_OPTIONS', `V')dnl

这里， `/etc/certs/` 是准备用来在本地保存证书和密钥的位置。 最后， 需要重新生成本地的 `.cf` 文件。 这一工作可以简单地通过在 目录中执行 `make` `install` 来完成。 接下来， 可以使用 `make` `restart` 来重新启动 Sendmail 服务程序。

如果一切正常的话， 在 `/var/log/maillog` 中就不会出现错误提示， Sendmail 也应该出现在进程列表中。

做一个简单的测试， 使用 telnet(1) 来连接邮件服务器：

    # telnet example.com 25
    Trying 192.0.34.166...
    Connected to example.com.
    Escape character is '^]'.
    220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
    ehlo example.com
    250-example.com Hello example.com [192.0.34.166], pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-ETRN
    250-AUTH LOGIN PLAIN
    250-STARTTLS
    250-DELIVERBY
    250 HELP
    quit
    221 2.0.0 example.com closing connection
    Connection closed by foreign host.

如果输出中出现了 “STARTTLS” 则说明一切正常。

上一页 | 起始页 | 下一页
Kerberos5 | 上一级 | IPsec 上的 VPN

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.