自学内容网 自学内容网

Apache和HTTPS证书的生成与安装

摘要

介绍linux系统下使用openssl生成https证书,并将证书安装在apache服务器上,最终实现通过https访问服务器。这个过程涉及到openssl生成自签名证书(适用于测试环境),修改apache配置,开放防火墙https端口等过程。

生成自签名证书

此小节引用自 https://blog.csdn.net/charlesfromcn/article/details/108509564

  1. 首先使用yum完成openssl的安装
    yum install -y mod_ssl

  2. 安装完成后选择合适的目录作为证书保存地,生成根证书的私钥(CA证书的RSA密钥,PEM格式),执行命令:
    openssl genrsa -des3 -out server.key 2048

  • 如果需要设置密码,则可以随便输入数字:1234
  • 证书中的国家、省份、城市等附件信息可以自定以填写,例如国家CN、省份SC等等
  1. openssl调用此文件会经常要求输入密码,如果想去除此输密码的步骤,可以执行命令:
    openssl rsa -in server.key -out server.key

  2. 生成证书签署请求,(创建服务器证书的申请文件server.csr), 执行命令:
    openssl req -new -key server.key -out server.csr

  3. 生成自签证书,即根证书CA(有效期为十年的),执行命令:
    openssl req -new -x509 -key server.key -out ca.crt -days 3650

  4. 创建服务器证书(有效期十年):
    openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

通过以上步骤,即可在当前工作目录生成证书相关文件

# tree
.
├── ca.crt
├── ca.srl
├── server.crt
├── server.csr
└── server.key

接下来进行证书的安装,以apache服务器为例

Apache服务器ssl证书的安装

通过修改conf配置将证书安装至apache服务器,主要为以下几步:

  1. 找到apache服务器自带的ssl配置conf文件,一般在以下位置
    /etc/httpd/conf.d/ssl.conf
  2. 使用vim命令编辑conf文件,编辑ssl.conf 文件里的证书路径
    指定.crt.key文件的位置
#  将 SSLCertificateFile 指向一个 PEM 编码的证书。如果证书被加密了,那么系统会提示你输入一个密码短语。请注意,重启 httpd 服务时会再次提示输入密码。记住,如果你同时拥有 RSA 和 DSA 证书,
#   你可以同时配置它们(以便也允许使用 DSA 密码套件等)。
#   一些 ECC 密码套件(http://www.ietf.org/rfc/rfc4492.txt)需要一个 ECC 证书,这个证书也可以同时配置。
SSLCertificateFile /etc/httpd/xxx.crt

#   服务器私钥:
#   如果私钥没有与证书合并在一起,请使用此指令指向私钥文件。请记住,如果你同时拥有 RSA 和 DSA 私钥,你可以同时配置它们(以便也允许使用 DSA 密码套件等)。
#   当使用 ECC 密钥时,也可以同时配置它们。
SSLCertificateKeyFile /etc/httpd/xxx.key

配置完成后重启服务器
systemctl restart httpd

防火墙开启https端口

服务器启动后,还需开启https默认端口443,否则服务器无法通过外部访问到URL地址

  1. 检查防火墙监听状态
    firewall-cmd --list-all显示以下信息
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client mdns ssh
  ports: 80/tcp 443/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

注:

target: default
    这指定了规则的目标行为,default通常意味着使用防火墙的默认策略。
icmp-block-inversion: no
    这表示不反转ICMP阻塞规则。通常,icmp-block用于阻止ICMP(Internet Control Message Protocol)消息,而icmp-block-inversion可能用于指示是否要反转这个阻塞行为。在这里,no表示不反转,即保持默认的ICMP阻塞行为(如果有的话)。
interfaces: ens33
    这指定了规则适用的网络接口,ens33是网络接口的名称。
sources:
    这个字段后面没有值,通常用于指定规则的源地址或地址范围。在这里,它可能是空的,意味着规则适用于所有源地址。
services: dhcpv6-client mdns ssh
    这指定了规则允许的服务,dhcpv6-client(DHCPv6客户端服务)、mdns(多播DNS,也称为mDNSResponder或Avahi,用于局域网内的服务发现)和ssh(安全外壳协议,用于远程登录)。
ports: 80/tcp 443/tcp
    这指定了规则允许的TCP端口,80通常用于HTTP,443用于HTTPS。
protocols:
    这个字段后面没有值,通常用于指定允许或阻止的网络协议(如TCP、UDP等)。在这里,它可能是空的,或者意味着规则适用于所有协议(但这取决于防火墙的具体实现和上下文)。
forward: yes
    这表示启用端口转发。
masquerade: no
    不启用某种形式的地址伪装或转换。
forward-ports:
    这个字段后面没有值,通常用于指定端口转发规则。在这里,它可能是空的,意味着没有定义具体的端口转发规则。
source-ports:
    这个字段后面没有值,通常用于指定规则的源端口。在这里,它可能是空的,意味着规则适用于所有源端口。
icmp-blocks:
    这个字段后面没有值,通常用于指定要阻塞的ICMP消息类型。在这里,它可能是空的,意味着没有定义具体的ICMP阻塞规则。
rich rules:
    这个字段后面没有值,但在Firewalld中,rich rules允许定义复杂的规则,这些规则可以包含多个条件和动作。它们通常用于实现更精细的控制,比如基于源/目标地址、端口、协议、时间等的规则。在这里,字段是空的,意味着没有定义具体的rich rules。
  1. 如果443端口没有开放,则需要通过以下命令开放端口
    firewall-cmd --add-port 443/tcp --permanent
    firewall-cmd --reload

通过以上步骤,则完成了https防火墙的开放

小结

启动服务器后,使用https访问 https://xxx.xxx.xxx.xxx,如果成功,则说明配置正确,如果失败,则查询服务器日志/var/log/httpd和防火墙日志/var/log/firewalld


原文地址:https://blog.csdn.net/alicinya/article/details/143837343

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!