RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS

简介: RH358配置Web服务器--使用 Apache HTTPD 配置 HTTPS

RH358配置Web服务器–使用 Apache HTTPD 配置 HTTPS

介绍Https和证书如何配置实现Https访问。

RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html

1. 描述 TLS 协议:

  • TLS (Transport Layer Security)是HTTPS协议中用来保护web流量的真实性、保密性和完整性免遭攻击的协议。

  • TLS使用公钥加密建立安全的TLS会话。一个密钥能加密的,只有它匹配的密钥才能解密。

  • 每个服务器都必须安装TLS证书。该证书包含关于该证书属于哪个服务器、过期时间以及密钥对的一半的信息;公共密钥。它还由证书颁发机构**(CA)进行数字签名**,该签名可用于验证服务器证书的真实性。服务器还必须安装与证书的公钥相匹配的私钥。

  • 当客户端连接到服务器并请求TLS会话时,它们执行一次初始握手,以就双方都可以支持的一组加密密码达成一致。服务器提供客户端客户机使用证书中的信息和CA的签名对其进行验证。然后客户端使用公钥与服务器进行安全通信,并使用它建立一个更快的会话密钥,该会话密钥可用于快速加密和解密数据,然后用于实际的安全会话。

2. 获取服务器证书

要获得新的服务器证书,通常需要创建一个未签名的证书签名请求(CSR)和匹配的私钥。然后,您需要向用户信任的CA提供该CSR,让用户满意地验证您控制该服务器,并安排他们签署CSR,将其转换为有效的证书。有许多商业ca对这种服务收费。Web浏览器通常预先配置为信任商业ca的签名。

出于测试目的,可以创建自签名证书。这是一个包含身份信息和公钥的证书,但它是由自己的私钥签名的。它可以用来建立加密的TLS连接,但是客户端将不能正确地验证证书,他们可能会拒绝连接到使用它们的站点,并显示其他错误和警告消息。

创建证书签名请求

可以使用Ansible生成私钥和匹配的CSR或匹配的自签名证书。您还可以使用openssl包中的工具来检查这些文件,并作为生成它们的另一种方法。

openssl_privatekey 模块用于创建 TLS 私钥,使用以下两种算法:RSA 或 ECDSA

RSA 支持更广泛,密钥较大,且较旧。

ECDSA 密钥较小并提供相似的安全性,较旧的 web 浏览器可能不支持。

为了安全起见,web服务器的私钥通常保存在/etc/pki/tls/private中,您应该确保它们只有根用户可读,并且具有SELinux类型cert_t。

下例创建 2048 位 RSA 私钥和 256 位 ECDSA:

- name: Make sure a RSA private key was generated
  openssl_privatekey:
path: /etc/pki/tls/private/ansible.rsa.key

- name: Make sure an ECDSA private key was generated
  openssl_privatekey:
    path: /etc/pki/tls/private/ansible.ecdsa.key
    type: ECC
    curve: secp256r1

生成私钥后,可使用 openssl_csr 模块来创建证书签名请求:

- name: CSR exists and is correct
  openssl_csr:
    path: /root/ansible.csr
    privatekey_path: /etc/pki/tls/private/ansible.key
    subject_alt_name: "DNS:demo.example.com,DNS:www.example.com"
    common_name: demo.example.com
    C: US
    ST: North Carolina
    L: Raleigh
    O: Example, Inc.
    backup: yes

- subject_alt_name 是⼀个逗号分隔的列表,列出虚拟主机的 ServerName 及其所有 ServerAlias 名称,名称以 DNS: 开头,表示它们是 DNS 名称。也可以使用 IP:172.25.0.10 指定 IP 地址

- 其他字段 C、ST、L 和 O 键代表所在国家/地区(双字符 ISO3166 格式)、州或省、所在地(城市)和组织

- common_name 是证书所属服务器的名称

可以使用以下命令检查CSR的内容:

[root@host ~]# openssl req -in ansible.csr -noout -text

当生成CSR并将其提交给CA进行签名时,不应该向CA提供您的私钥副本。当CA签署了你的CSR后,他们会给你一个完成的服务器证书,你可以把它安装到你的web服务器上。

还可以使用openssl_certificate Ansible模块创建一个用于测试的自签名证书。

- name: Make sure self-signed certificate is correct
  openssl_certificate:
    path: /etc/pki/tls/certs/ansible.crt
    privatekey_path: /etc/pki/tls/private/ansible.key
    csr_path: /root/ansible.csr
    provider: selfsigned
    selfsigned_not_after: +90d

selfsigned_not_after: +90d变量和值表示该证书在签署后90天内有效

**注意:**自签名证书需要使用自己的私钥来进行自签名。这与 CA所做的操作不同。证书颁发机构使用自己的私钥对用户的证书进行签名,不需要也不应为其提供私钥

可以用下面的命令检查这个TLS证书:

[root@host ~]# openssl x509 -in ansible.crt -noout -text

**注意:**为您的网站获得TLS证书的一种方法是使用非营利的LetsEncrypt CA服务。LetsEncrypt基于您控制DNS域或特定web服务器的证明来验证您的身份,并颁发短期TLS证书。

3. 配置基于 TLS 虚拟主机

Apache HTTP Server需要安装一个扩展模块来激活TLS支持。在Red Hat Enterprise Linux 8上,可以使用mod_ssl包安装该模块。

[root@host ~]# yum install mod_ssl

这个包自动启用httpd,默认虚拟主机监听端口443/TCP。这个默认的虚拟主机配置在/etc/httpd/conf.d/ssl.conf中。

使用TLS的虚拟主机与常规虚拟主机的配置方式相同,只是有一些附加参数。

<VirtualHost *:443>
  ServerName demo.example.com
  SSLEngine on    # 为虚拟主机启用 TLS
  SSLCertificateFile /etc/pki/tls/certs/demo.example.com.crt        #指定虚拟主机的证书的位置
  SSLCertificateKeyFile /etc/pki/tls/private/demo.example.com.key  #指定虚拟主机的私钥的位置
</VirtualHost>

这个例子缺少一些重要的指令,比如DocumentRoot,但是这些设置是从主配置继承的。

有许多设置可用来优化启用tls的虚拟主机的行为。它们可能控制TLS协议的版本以及支持什么会话加密协议。更详细的虚拟主机块如下所示:

<VirtualHost _default_:443>
  ErrorLog logs/ssl_error_log
  TransferLog logs/ssl_access_log
  LogLevel warn
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
# 指定httpd可以用来与客户端通信的协议列表。您至少应该禁用已知安全问题的SSLV2和SSLV3。
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
# 列出httpd在与客户端通信时可以使用的加密密码。密码的选择会严重影响性能和安全性。
  SSLHonorCipherOrder on
# 确保服务器选择ssLciphersuite列表中前面出现的密码。因此,应该首先列出最安全的密码。
  SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  CustomLog logs/ssl_request_log \
           "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

4. 将HTTP客户端重定向到HTTPS站点

通常,当HTTPS站点可用时,用户使用HTTP连接到一个网站。这不必要地降低了连接的安全性。

如果你关闭了站点的HTTP版本,这将提高安全性,但这样HTTP用户将无法连接到你的站点。一种更复杂的方法是使用HTTPS自动将任何通过HTTP连接到同一资源的客户机重定向。

要设置这些重定向,请为与TLS保护的虚拟主机相同的ServerName和serverAlias配置一个HTTP虚拟主机。得到的虚拟主机可能看起来像这样:

<VirtualHost *:80>
  ServerName www.lab.example.com
  Redirect "/" "https://www.lab.example.com"
</VirtualHost>

<VirtualHost *:443>
  ServerName www.lab.example.com
  SSLEngine On
  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNull:!MD5
  SSLHonorCipherOrder on
  SSLCertificateFile /etc/pki/tls/certs/www.lab.example.com.crt
  SSLCertificateKeyFile /etc/pki/tls/private/www.lab.example.com.key
  DocumentRoot /srv/www/www.lab.example.com
</VirtualHost>

5. 课本练习

[student@workstation ~]$ lab web-https start

1. 同时安装httpd和mod_ssl包。

[root@servera ~]# yum -y install httpd mod_ssl

2. 创建内容目录,识别内容和适当的SELinux上下文。

[root@servera ~]# mkdir -p /srv/{www-a,servera}/www
[root@servera ~]# echo 'www-a' > /srv/www-a/www/index.html
[root@servera ~]# echo 'servera' > /srv/servera/www/index.html

[root@servera ~]# restorecon -Rv /srv/

3. 配置SSL虚拟主机

[root@servera ~]# vim /etc/httpd/conf.d/www-a.conf
<VirtualHost *:80>
ServerName www-a.lab.example.com
Redirect "/" "https://www-a.lab.example.com"
</VirtualHost>

<VirtualHost *:443>
  ServerName www-a.lab.example.com
  SSLEngine On
  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite HIGH:MEDIUM:!aNull:!MD5
  SSLHonorCipherOrder on
  SSLCertificateFile /etc/pki/tls/certs/www-a.lab.example.com.crt
  SSLCertificateKeyFile /etc/pki/tls/private/www-a.lab.example.com.key
  SSLCertificateChainFile /etc/pki/tls/certs/cacert.crt
  DocumentRoot /srv/www-a/www
</VirtualHost>

<Directory /srv/www-a/www>
  Require all granted
</Directory>

[root@servera ~]# cp /etc/httpd/conf.d/{www-a,servera}.conf
[root@servera ~]# sed -i 's/www-a/servera/g' /etc/httpd/conf.d/servera.conf

4. 复制已配置好的证书

[root@servera ~]# cd /etc/pki/tls/certs
[root@servera certs]# scp workstation:/home/student/www-a.lab.example.com.crt ./
root@workstation's password: redhat
[root@servera certs]# scp workstation:/home/student/servera.lab.example.com.crt ./
root@workstation's password:redhat
[root@servera certs]# scp workstation:/home/student/cacert.crt ./
root@workstation's password:redhat

[root@servera certs]# cd /etc/pki/tls/private
[root@servera private]# scp workstation:/home/student/www-a.lab.example.com.key ./
root@workstation's password: redhat
[root@servera private]# scp workstation:/home/student/servera.lab.example.com.key ./
root@workstation's password:redhat

5. 启动并启用httpd服务并打开相应的防火墙端口。

[root@servera ~]# systemctl enable --now httpd
[root@servera ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@servera ~]# firewall-cmd --reload

完成实验

[student@workstation ~]$ lab web-https finish

总结

  • 描述TLS协议。
  • 配置证书实现Https。
  • 将HTTP客户端重定向到HTTPS。
  • 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。

目录
相关文章
|
移动开发 数据挖掘 开发者
服务器发送事件(SSE)在现代Web开发中的关键作用
服务器发送事件(SSE)是HTML5标准协议,用于服务器主动向客户端推送实时数据,适合单向通信场景。相比WebSocket,SSE更简洁高效,基于HTTP协议,具备自动重连、事件驱动等特性。常见应用场景包括实时通知、新闻推送、数据分析等。通过Apipost等工具可轻松调试SSE,助力开发者构建高效实时Web应用。示例中,电商平台利用SSE实现秒杀活动通知,显著减少延迟并简化架构。掌握SSE技术,能大幅提升用户体验与开发效率。
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
1165 1
|
Java 网络安全 Apache
SshClient应用指南:使用org.apache.sshd库在服务器中执行命令。
总结起来,Apache SSHD库是一个强大的工具,甚至可以用于创建你自己的SSH Server。当你需要在服务器中执行命令时,这无疑是非常有用的。希望这个指南能对你有所帮助,并祝你在使用Apache SSHD库中有一个愉快的旅程!
1117 29
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
508 3
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
312 3
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
412 1
|
缓存 前端开发 Java
打造未来兼容的Web应用:Apache Wicket引领响应式设计的热潮
【9月更文挑战第4天】在软件开发领域,构建响应式Web应用至关重要。Apache Wicket作为一个强大的Java框架,支持响应式设计,确保应用在不同设备上均有出色体验。本文通过示例代码介绍使用Wicket的最佳实践,涵盖页面与组件模型、CSS媒体查询及自定义标记处理器的应用。同时,文章强调了优化加载时间、增强交互性和提升可访问性的重要性,帮助开发者打造高性能且美观的Web应用。
345 3
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
678 1
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
1536 1
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
307 0

推荐镜像

更多