龙空技术网

CentOS7 - 配置Apache以通过HTTPS提供页面

小白熊工作室 137

前言:

当前你们对“centosapache建站”可能比较讲究,小伙伴们都需要了解一些“centosapache建站”的相关知识。那么小编也在网络上汇集了一些有关“centosapache建站””的相关内容,希望同学们能喜欢,看官们一起来学习一下吧!

配置Apache以通过HTTPS提供页面

HTTP流量通过网络以纯文本形式发送。 在不受信任的环境中,恶意用户可以监控和捕获流量,以监视您正在访问的网站以及您正在阅读的内容。 虽然如果受害者只是在YouTube上阅读每日新闻或观看猫视频,这种窥探并不有趣,但如果电子商务交易未加密,则用户的信用卡号,送货地址和其他详细信息可能会受到阻碍。 为了支持加密流量,Apache支持HTTPS。 此配方将教您如何配置HTTPS支持,并保护用户的流量免受窥探,无论内容多么温和.

准备

此配方需要具有有效网络连接的CentOS系统。 它假定系统配置了IP地址192.168.56.100并且正在运行Apache,如前面的配方中所述。 通过使用root帐户登录或使用sudo,还需要管理权限.

怎么做

请按照以下步骤通过HTTPS提供页面:

使用openssl生成新的密钥文件和安全证书:

openssl req -newkey rsa:2048 -nodes \ -keyout /etc/pki/tls/private/ \ -x509 -days 730 -subj "/CN=" -text \ -out /etc/pki/tls/certs/
安装服务器的SSL模块:
yum install mod_ssl
使用文本编辑器打开/etc/httpd/conf.d/ssl.conf文件:
vi /etc/httpd/conf.d/ssl.conf
找到SSLCertificateFile选项并更新其值以指向自签名证书文件:
SSLCertificateFile /etc/pki/tls/certs/
找到SSLCertificateKeyFile选项并将其更新为指向加密密钥:
SSLCertificateKeyFile /etc/pki/tls/private/
保存更改并关闭文件。重新启动服务器以使更新的配置生效:
systemctl restart httpd
在防火墙中打开端口443以允许HTTPS流量:
firewall-cmd --zone=public --permanent --add-service=httpsfirewall-cmd --reload
工作原理

Apache HTTP Server附带了一个默认的SSL / TLS配置,该配置包含在/etc/httpd/conf.d/ssl.conf中的catch-all虚拟主机定义中。 由于大部分配置已经为我们完成,剩下的就是安装SSL模块,生成新密钥和证书,并更新配置以指向我们的文件。

首先,我们生成了一个新的加密密钥和签名证书。 如果您已经在第9章管理电子邮件中阅读了配置Postfix以使用TLS配方,那么您已经知道安全通信需要密钥,证书确认密钥的所有权:

openssl req -newkey rsa:2048 -nodes \ -keyout /etc/pki/tls/private/ \ -x509 -days 730 -subj "/CN=" -text \ -out /etc/pki/tls/certs/

该配方生成一个自签名证书,足以供个人使用和内部网站点使用。 req选项创建新证书,-newkey生成新私钥。 密钥是2048位RSA密钥,本身未加密(-nodes),因此每次启动Web服务器时,我们都不需要提供密码来解密密钥。 证书是X.509证书(-x509),有效期为3年(-days 730)。 证书的CN字段必须与其将用于的站点的域名匹配。

在配置文件中,SSLCertificateFile选项指定包含证书文件的文件,并使用SSLCertificateKeyFile标识密钥:

SSLCertificateFile /etc/pki/tls/certs/ /etc/pki/tls/private/

服务器通过查看传入请求中的站点名称来确定要使用哪个虚拟主机配置来处理请求。但是,最初的HTTPS实现在Web客户端和服务器之间完整地加密了请求,包括站点的主机名,这引发了鸡和蛋的问题。服务器需要知道要提供哪个证书而不能在不读取请求的情况下知道它,并且客户端需要一个与该站点的域匹配的证书,然后才能发送请求。无法将TLS与基于名称的虚拟主机一起使用,并且任何加密站点都需要其自己的专用IP地址。

RFC-3546(传输层安全扩展)修改了协议,以便可以不加密地发送主机名。这允许服务器选择正确的证书来满足客户端,并为使用TLS和虚拟主机打开了大门。主流浏览器花了大约十年的时间来支持这一变化,但我们现在几乎就是版本7的Internet Explorer,版本2的Mozilla Firefox以及版本6的Google Chrome支持所谓的服务器名称指示(SNI)。

要通过HTTPS为虚拟主机提供服务,每个站点都需要自己的证书和密钥。然后,将SSLEngine,SSLCertificateFile和SSLCertificateKeyFile选项添加到主机的配置中。端口号也需要在配置中更改为443,即HTTPS流量的默认端口:

 <VirtualHost *:443> ServerName  DocumentRoot "/var/www/example.com/www/html" CustomLog "/var/log/httpd/example.com/www/access_log" common ErrorLog "/var/log/httpd/example.com/www/error_log" SSLEngine on SSLCertificateFile /etc/pki/tls/certs/ SSLCertificateKeyFile /etc/pki/tls/private/ <IfModule proxy_fcgi_module> ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/ example.com/www/html/$1 </IfModule> </VirtualHost>

虽然自签名证书足以供个人使用和私有网络/内部网站点,但您很可能希望将可信证书用于可在更大规模上访问的站点。但是,根据证书颁发机构和您的请求的具体情况,购买可信证书可能会很昂贵。如果您只需要基本的可信证书,那么您可能需要调查Let的加密是否能满足您的需求。 Let's Encrypt是一个项目,提供自动化的自助服务模型,用于免费生成可信证书。

要使用Let的加密,您需要安装EPEL存储库中提供的certbot软件包(如果您尚未启用存储库,请参阅第4章软件安装管理中的注册EPEL和Remi存储库配方)。然后运行certbot certonly命令并按照提示请求您的证书。可以在上的Let's Encrypt / Certbot用户指南中在线找到完整说明。

注意

Let's Encrypt有一些注意事项。 首先,证书有效期为三个月; 您需要每90天申请一张新证书。 它也不会生成IP地址证书。 此外,它限制请求,虽然有必要帮助防止滥用,但是使用动态DNS服务(如DynDNS或NoIP)的用户可以访问这些请求。 为了让Let's Encrypt成为您可行的选择,您需要一个合适的域并访问Web系统以自动进行续订。 如果您正在运行家庭服务器或使用共享托管服务提供商,那么Let's Encrypt可能不适合您.

See also

Refer to the following resources for working with HTTPS:

SSL/TLS Strong Encryption: How-To ()How to create an SSL Certificate for Apache on CentOS 7 ()How to secure Apache with Let's Encrypt on CentOS 7 ()

标签: #centosapache建站