科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Apache HTTP 安全服务器配置

Apache HTTP 安全服务器配置

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文提供了关于启用了 mod_ssl 安全模块来使用 OpenSSL 库和工具包的 Apache HTTP 服务器的基本信息。这三个部件的组合在本章中将会被称为安全万维网服务器或安全服务器。

作者:网络 来源:网络 2007年10月2日

关键字: 配置 mod_ssl Web服务器 Apache Linux

  • 评论
  • 分享微博
  • 分享邮件
本文提供了关于启用了 mod_ssl 安全模块来使用 OpenSSL 库和工具包的 Apache HTTP 服务器的基本信息。这三个部件的组合在本章中将会被称为安全万维网服务器或安全服务器。

  mod_ssl 模块是 Apache HTTP 服务器的安全模块。mod_ssl 模块使用由 OpenSSL 计划提供的工具来给 Apache HTTP 服务器添加一项重要功能 — 加密通信的能力。与之相反,使用常规 HTTP,浏览器和万维网服务器间的通讯就会使用纯文本,它们在浏览器和服务器之间的路线上可能会被其它人截取并偷阅。

  mod_ssl 配置文件位于 /etc/httpd/conf.d/ssl.conf。要载入这个文件而使 mod_ssl 能够工作,你必须在 /etc/httpd/conf/httpd.conf 中包括 Include conf.d/*.conf 这条声明。该声明被默认包括在默认的 Apache HTTP 服务器配置文件中。

  要启用安全服务器,你至少需要安装以下软件包:

  httpd
  httpd 软件包包含 httpd 守护进程和相关的工具、配置文件、图标、Apache HTTP 服务器模块、说明书(man)页和其它被 Apache HTTP 服务器使用的文件。

  mod_ssl
  mod_ssl 软件包包括 mod_ssl 模块,它通过安全套接字层(SSL)和传输层安全(TLS)协议为 Apache HTTP 服务器提供了强大的加密能力。

  openssl
  openssl 软件包包含 OpenSSL 工具包。OpenSSL 工具包实现 SSL 和 TLS 协议,还包括一个常规目的的加密库。

  除此之外,其它软件包也可以提供一定程度的安全功能(但不是安全服务器运行所必需的):

  httpd-devel
  httpd-devel 软件包包含 Apache HTTP 服务器的包含文件、头文件和 APXS 工具程序。如果你打算载入额外的模块(除了该产品所提供的),你需要以上所有文件和程序。

  如果你不打算在 Apache HTTP 服务器中载入额外模块,你不安装该软件包。

  OpenSSH 软件包
  The OpenSSH 软件包提供了一组用来在远程机器上登录和执行命令的 OpenSSH 网络连接工具集合。OpenSSH 工具加密所有交通(包括口令),因此你可以避免被窃听,防范截取连接和其它对你的机器和远程机器间通信的攻击。

  openssh 软件包包括 OpenSSH 客户程序和服务器都需要的核心文件。openssh 软件包还包括 scp,它是 rcp(用来在机器间复制文件)和 ftp(用来在机器间传输文件)的安全替换。

  openssh-askpass 软件包支持对话框窗口的显示。该窗口在使用 OpenSSH 代理时提示你输入口令。

  openssh-askpass-gnome 软件包可以在 OpenSSH 程序提示你输入口令时和 GNOME 桌面环境一起使用来显示图形化对话窗口。如果你运行的是 GNOME,并使用 OpenSSH 工具,你应该安装该软件包。

  openssh-server 软件包包括 sshd 安全 shell 守护进程和相关文件。安全 shell 守护进程是 OpenSSH 套件的服务器一方,如果你想允许 SSH 客户连接到你的主机,你必须在主机上安装该软件包。

  openssh-clients 软件包包含进行加密 SSH 服务器连接所需的客户程序,其中包括:ssh(rsh 的安全替换);sftp(ftp 的安全替换,用来在机器间传输文件);slogin(用于远程登录的 rlogin 和通过 Telnet 协议与另一主机通信的 telnet 的安全替换)。

  openssl-devel
  openssl-devel 软件包包含编译带有各类加密算式和协议支持的应用程序所需的静态库和包含文件。你只有在开发包括 SSL 支持的应用程序时,才需要安装该软件包 — 仅使用 SSL 不必安装该软件包。

  stunnel
  stunnel 软件包提供了 Stunnel SSL 会绕程序。Stunnel 支持 TCP 连接的 SSL 加密,因此它可以为无 SSL 的守护进程和协议(如 POP、IMAP 和 LDAP)提供加密,却不需对守护进程的编码做任何修改。

  你的安全服务器使用安全套接字层(SSL)和(多数情况下)来自证书权威(CA)的数码证书来提供安全性。SSL 处理浏览器和你的安全服务器间的加密通讯和互相验证。CA 认可的数码证书为你的安全服务器提供验证(CA 以它的名誉来担保你的机构组织的身份)。当你的浏览器使用 SSL 加密通讯时,你会看到导航栏上的划一资源定位(URL)的开头有一个“https://”前缀。

  加密依赖于对钥匙的使用(你可以把它们当成数据格式的秘密编码和解码钥匙)。传统的或对称的加密术中,事务的两端都使用同一把钥匙,它们可以用这把钥匙来破译彼此的传输。在公共或非对称加密术中,有两把钥匙并存:公钥和密钥。某人或某机构把他们的密钥保密,只公布他们的公钥;使用密钥编码的数据只能用公钥才能解码。

  要设置你的安全服务器,你将会使用公共加密术来创建公钥和密钥对。在多数情况下,你会向某 CA 发送证书请求(包括你的公钥)、你的公司身份的证据,并且付款。CA 将会校验你的证书请求和身份,然后把你的安全万维网证书寄回给你。

  安全服务器使用证书来向万维网浏览器标明身份。你可以生成你自己的证书(叫做“自签”证书),或者你可以从证书权威中获取证书。来自有声望的 CA 的证书会担保与某一特定公司或机构相连的网站的身份。

  另外,你也可以创建你自己的自签证书。然而请注意,自签证书不应该被用在多数生产环境中。自签证书不会被用户的浏览器自动接受 — 浏览器将会征询用户是否要接受该证书并创建安全连接。

  在你有了自签的证书或来自 CA 的证书后,你需要把它安装在你的安全服务器上。

  使用已存钥匙和证书

  如果你已有现存的钥匙和证书(例如,如果你要安装安全服务器来替换另一家公司的安全服务器产品),你有可能可以在安全服务器中使用现存的钥匙和证书。在下面这两种情况下,你将无法使用现存的钥匙和证书:

  如果你改变了你的 IP 地址和域名 — 证书是向特定 IP 地址和域名对颁发的。如果你改变了域名或 IP 地址,你需要申请一份新证书。

  如果你有一份来自 VeriSign 的证书,但想改变服务器软件 — VeriSign 是使用较广泛的 CA。如果你已有一份由于其它原因而获得的 VeriSign 证书,你可能会打算新安全服务器中使用现有的 VeriSign 证书,然而,你将不会被允许使用它。这是因为 VeriSign 依据特定服务器软件和 IP 地址/域名组合来颁发证书。

  如果你改变了以上任一参数(譬如,从前你使用了另一个安全服务器产品,现在你想使用这个安全服务器),你为从前的配置所获取的 VeriSign 证书将无法在新配置中使用。你必须获取一份新证书。

  如果你有可以使用的已存钥匙和证书,你将不必生成新钥匙或获取新证书。然而,你可能需要转移并重命名包含钥匙和证书的文件。

  把你的现存钥匙文件转移到:

  /etc/httpd/conf/ssl.key/server.key

  将你的现存证书文件转移到:

  /etc/httpd/conf/ssl.crt/server.crt

  如果你要升级安全万维网服务器,你的旧钥匙(httpsd.key)和证书(httpsd.crt)将会位于 /etc/httpd/conf/ 下。你将需要转移并重命名你的钥匙和证书,因此安全服务器才能使用它们。使用以下两个命令来转移并重命名钥匙和证书文件:

  mv /etc/httpd/conf/httpsd.key /etc/httpd/conf/ssl.key/server.key
  mv /etc/httpd/conf/httpsd.crt /etc/httpd/conf/ssl.crt/server.crt

  然后,使用下面的命令来启动安全服务器:

  /sbin/service httpd start

  安全服务器会提示你输入口令句。键入口令句后按 [Enter] 键,服务器就会启动。

  证书类型

  如果你从红帽提供的 RPM 中安装了安全服务器,一个随机钥匙和测试证书就会被生成并放置在适当的目录中。然而,在你使用安全服务器之前,你必须生成你自己的钥匙并获取正确标记你的服务器身份的证书。

  你需要钥匙和证书才能操作安全万维网服务 — 这意味着你可以生成一个自签的证书或从某 CA 处购买一份由 CA 签名的证书。这两者间有什么区别呢?

  由 CA 签名的证书为你的服务器提供两项重要能力:

  浏览器(通常)会自动识别证书,并且不必提示用户就能够允许开通安全连接。

  当某 CA 颁发了签名的证书,他们是在向浏览器担保提供网页的机构的身份。

  如果你的安全服务器被广大公众所访问,你的安全服务器需要有 CA 签名的证书,因此访问你的网站的用户可以信任该网站的确是声明拥有它的机构所拥有。在签发证书前,CA 校验申请证书机构的身份确实如他们所言。

  多数支持 SSL 的万维网浏览器有一个它们会自动接受证书的 CA 列表。如果浏览器遇到一份来自列表之外的授权 CA 的证书,浏览器会询问用户是否要接受连接。

  你可以为你的安全服务器生成一份自签的证书,但是请留意,自签证书将不会提供和 CA 签发的证书相同的功能。自签证书将不会被多数用户浏览器自动识别,而且它将不会担保提供网站的机构的身份。由 CA 签发的证书为安全服务器提供这两项重要的能力。如果你的安全服务器将会用在生产环境中,你可能会需要 CA 签发的证书。

  从 CA 获取证书的手续非常简单。下面是对其步骤的简单描述:

  创建加密的公钥和密钥对。

  根据公钥创建证书请求。证书请求包括关于你的服务器和主持它的公司的信息。

  向某 CA 发送证书请求,以及证明你的身份的文档。我们不能向你建议该选择哪个 CA。你的决定可以建立在过去的经验上,或者你的朋友或同事的经验上,或者单从经济上考虑。

  当你选定了一个 CA 后,你需要遵循他们提供的说明来获取证书。

  当 CA 对你的身份的真实性满意后,他们就会给你寄发一份数码证书。

  在你的安全服务器上安装该证书,然后开始处理安全事务。

  不论你是从 CA 处获取证书,还是使用自签的证书,第一个步骤都是生成钥匙。

  生成钥匙

  你必须是根用户才能生成钥匙。

  首先,使用 cd 命令转换到 /etc/httpd/conf/ 目录中,使用下面的命令删除在安装中生成的假钥匙和证书:

  rm ssl.key/server.key
  rm ssl.crt/server.crt

  其次,你需要生成你自己的随机钥匙。改换到 /usr/share/ssl/certs/ 目录中,键入以下命令:

  make genkey

  你的系统会显示和以下相似的消息:

  umask 77 ; \
  /usr/bin/openssl genrsa -des3 1024 > /etc/httpd/conf/ssl.key/server.key
  Generating RSA private key, 1024 bit long modulus
  .......++++++
  ................................................................++++++
  e is 65537 (0x10001)
  Enter pass phrase:

  现在,你需要键入口令句。要获得最佳安全性,你的口令应至少包括八个字符,包括数字和标点,且不是词典中的现成词汇。另外请记住,你的口令是区分大小写的。

   注记
   你在每次启动安全服务器的时候都需要输入这个口令句,因此请将它牢记在心。

  重新键入口令来校验它是否正确。一旦你正确地键入了,一个包括你的钥匙,叫做 >/etc/httpd/conf/ssl.key/server.key 的文件就会被创建。

  注意,如果你不想在每次启动安全服务器的时候都输入口令句,你将需要下面这两条命令,而不是 make genkey 来创建钥匙。

  使用下面的命令来创建你的钥匙:

  /usr/bin/openssl genrsa 1024 > /etc/httpd/conf/ssl.key/server.key

  然后使用这条命令来确定钥匙的权限被正确设置:

  chmod go-rwx /etc/httpd/conf/ssl.key/server.key

  在你使用以上命令创建钥匙后,你将不需要使用口令句来启动安全服务器。

   小心
    在你的安全服务器中禁用口令功能是一种安全风险。我们不提倡你禁用安全服务器的口令功能。

  不使用口令所造成的问题和主机的安全维护休戚相关。譬如,若有人危害了主机上的常规 UNIX 安全系统,他就可以获取你的密钥(server.key 文件的内容)。该钥匙可以用来提供似乎是来自你的安全服务器的网页。

  如果 UNIX 安全系统在主机上被认真维护(及时安装操作系统的补丁和更新;不操作不必要的或冒险的服务等等),安全服务器的口令可能就不是很必要。然而,由于你的安全服务器应该没必要被频繁重新启动,输入口令所能带来的额外保险在多数情况下是值得一行的。

  server.key 文件应该被系统的根用户拥有,不应该被其它用户存取。给该文件备份,将备份副本存放在安全之处。你需要备份的原因是,如果你在使用钥匙创建了证书请求后丢失了 server.key 文件,你的证书就不会再生效,而 CA 对此也爱莫能助。你只能再申请(并购买)一份新证书。

  生成发送给 CA 的证书请求

  一旦你创建了钥匙,下一步就是生成证书请求,你需要把该请求发送给选中的 CA。请确定你位于 /usr/share/ssl/certs 目录,并键入下面的命令:

  make certreq

  你的系统会显示下列输出,然后还会请你输入口令句(除非你禁用了口令句选项):

  umask 77 ; \
  /usr/bin/openssl req -new -key /etc/httpd/conf/ssl.key/server.key
  -out /etc/httpd/conf/ssl.csr/server.csr
  Using configuration from /usr/share/ssl/openssl.cnf
  Enter 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) [GB]:US
  State or Province Name (full name) [Berkshire]:North Carolina
  Locality Name (eg, city) [Newbury]:Raleigh
  Organization Name (eg, company) [My Company Ltd]:Test Company
  Organizational Unit Name (eg, section) []:Testing
  Common Name (your name or server's hostname) []:test.example.com
  Email Address []:admin@example.com
  Please enter the following 'extra' attributes
  to be sent with your certificate request
  A challenge password []:
  An optional company name []:

  默认回答紧随在每项要求后面的括号内([])。例如,第一项要求的信息是证书要被用于的国家,如下所示:

  Country Name (2 letter code) [GB]:

  出现在括号内的默认输入是 GB。要接受默认值,只需按 [Enter],或填入你的国家的两个字母的代号。

  你必须得回答剩下的问题。这些都应该是不言而喻的,不过你需要遵从以下准则:

  不要用地域或州省的缩写。用全称(如,St. Louis 应该被写成 Saint Louis)。

  如果你要把该 CSR 寄发给 CA,请确保在所有的字段内都提供了正确的信息,特别是 Organization Name 和 Common Name 这两项。CA 检查 CSR 中提供的信息以判定你的机构是否对你所提供的 Common Name 负责。CA 将会拒绝他们认为含有无效信息的 CSR。

  对于 Common Name,请确定你键入了你的安全服务器的真实名称(有效的 DNS 名称),而不是服务器的别名。

  Email Address 应该是网主或系统管理员的电子邮件地址。

  请避免 @、#、&、! 之类的特殊字符。某些 CA 将会拒绝包含特殊字符的请求。因此,如果你的公司名称包含 &,把它拼写为“and”而不使用“&”。

  不要使用这两项附加属性:A challenge password 和 An optional company name。要不输入这些字段而继续,只需按 [Enter] 键来接受空白的默认值即可。

  信息输入完毕后,一个叫做 /etc/httpd/conf/ssl.csr/server.csr 的文件就会被创建。该文件是你的证书请求,可以随时寄发给你的 CA。

  在你选定了 CA 后,按照他们在网站提供的说明行事。这些说明会告诉你如何发送证书请求,你还需要哪些文档以及付款信息。

  在你满足了 CA 的要求后,他们就会给你寄发证书(通常通过电子邮件)。将它们寄发的证书保存为(或剪贴为)/etc/httpd/conf/ssl.crt/server.crt 文件。请确定给该文件保留一份备份。

  创建自签的证书

  你可以创建自签的证书。请注意,自签的证书将不会提供由 CA 签发的证书所提供的安全担保。

  如果你想制作自签的证书,你首先需要按照前面提供的说明来创建随机钥匙。一旦创建了钥匙,请确定你目前位于 /usr/share/ssl/certs 目录中,再键入下面的命令:

  make testcert

  你将会看到以下输出,你会被提示输入口令句(除非你生成了无口令句的钥匙):

  umask 77 ; \
  /usr/bin/openssl req -new -key /etc/httpd/conf/ssl.key/server.key
  -x509 -days 365 -out /etc/httpd/conf/ssl.crt/server.crt
  Using configuration from /usr/share/ssl/openssl.cnf
  Enter 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) [GB]:US     
  State or Province Name (full name) [Berkshire]:North Carolina
  Locality Name (eg, city) [Newbury]:Raleigh
  Organization Name (eg, company) [My Company Ltd]:My Company, Inc.
  Organizational Unit Name (eg, section) []:Documentation
  Common Name (your name or server's hostname) []:myhost.example.com
  Email Address []:myemail@example.com

  提供了正确信息后,自签的证书就会在 /etc/httpd/conf/ssl.crt/server.crt 文件中被创建。生成证书后,你需要使用以下命令来重新启动安全服务器:

  /sbin/service httpd restart

  测试证书

  要测试默认安装的测试证书、CA 签发的证书、以及自签的证书,把你的万维网服务器转到以下主页(把 server.example.com 替换成你的域名):

  https://server.example.com

    注记
    注意 http 后面的 s。https: 前缀被用在安全 HTTP 事务中。

  如果你使用的是由知名 CA 签发的证书,你的浏览器可能会自动接受该证书(不必提示你输入)并创建安全连接。你的浏览器不会自动识别测试证书或自签证书,因为这些证书不是由 CA 签发的。如果你没有使用来自 CA 的证书,请遵循浏览器的说明来接受证书。

  你的浏览器接受了证书后,你的安全服务器就会显示默认的主页。

  访问服务器

  要访问你的安全服务器,使用和以下相似的 URL:

  https://server.example.com

  你的非安全服务器可以使用和以下相似的 URL 来访问:

  http://server.example.com

  安全万维网通讯的标准端口是端口443。非安全万维网通讯的标准端口是端口80。安全服务器默认配置对这两个端口都监听。因此,你不必在 URL 中指定端口号码(端口号码会被假定)。

  然而,如果你配置了你的服务器监听非标准的端口(除80和443之外的),你必须在每个 URL 中指定旨在非标准端口上连接服务器的端口号码。

  例如,你可能给你的服务器做了相应配置,因此你在端口12331上运行一个非安全的虚拟主机。任何旨在连接该虚拟主机的 URL 都必须在 URL 中指定端口号码。下面的 URL 例子会试图连接在端口12331监听的非安全万维网服务器:

  http://server.example.com:12331

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章