Apache2 配置 HTTPS

2023-05-16

文章目录

    • 自签名 CA 证书
    • 服务器部署 HTTPS
    • 客户端验证
      • Https 原理
    • 常见问题
    • 参考

自签名 CA 证书

  • 生成密钥

    使用 128 位的 RSA 算法生成的密钥,4096 是密钥的长度,建议使用 4096 或以上的值且必须是 2 的整数次方。

    openssl genrsa -out private.key 4096
    
  • 生成 RSA 证书

    openssl req -new -key private.key -out server.csr
    

    在提示 Common Name 时,输入与通过浏览器访问您网站的 URL 完全相同的地址,如域名地址 www.example.com 或者 IP 地址 10.133.5.170,如果服务器证书的 Common Name 与站点名字不匹配的话,客户端的浏览器就会怀疑您的证书的真实性,而出现报错情况:

    Common Name (e.g. server FQDN or YOUR name) []:10.133.5.170
    

    其余提示可以全部保留默认,直接回车即可。

  • 签发证书

    openssl req -x509 -days 365 -key private.key -in server.csr -out server.crt
    
  • 查看证书详细信息

    openssl x509 -noout -text -in server.crt
    

服务器部署 HTTPS

步骤:

  • 安装 Apache2
  • 开启 SSL 模块
  • 配置 CA 证书路径
  • 重启 Apache2 服务生效
sudo apt install -y apache2 ssl-cert    # 安装 apache2, ssl-cert
sudo a2enmod ssl                        # 开启 ssl 模块
sudo a2ensite default-ssl.conf          # 开启 default-ssl 站点
sudo systemctl restart apache2.service  # 重启服务

完成这些步骤之后,可以在浏览器上输入 https://localhost 进行验证;也可以通过 netstat 命令查看是否已经开启了 https(443) 端口:

$ netstat -antulp | grep 443

...
tcp6       0      0 :::443                  :::*                    LISTEN      -
...

如果可以看到以上信息说明已经正确启用了 SSL 模块。

/etc/apache2/sites-enabled/default-ssl.conf 文件是关于秘钥部分的配置:

    #   A self-signed (snakeoil) certificate can be created by installing
    #   the ssl-cert package. See
    #   /usr/share/doc/apache2/README.Debian.gz for more info.
    #   If both key and certificate are stored in the same file, only the
    #   SSLCertificateFile directive is needed.
    SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

默认情况下,ssl-cert 的软件包带了一份自签名证书,我们需要重新配置 SSLCertificateFile 指定证书路径和 SSLCertificateKeyFile 指定私钥路径。default-ssl.conf 修改为:

    #   A self-signed (snakeoil) certificate can be created by installing
    #   the ssl-cert package. See
    #   /usr/share/doc/apache2/README.Debian.gz for more info.
    #   If both key and certificate are stored in the same file, only the
    #   SSLCertificateFile directive is needed.
    SSLCertificateFile  /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/private.key

在此之前需要将 server.crtprivate.key 放入规定的位置,可以使用命令:

sudo cp server.crt /etc/ssl/certs
sudo cp private.key /etc/ssl/private

重新启动 Apache2 服务器让配置生效:

sudo systemctl restart apache2.service

客户端验证

  • server.crt 的内容追加到 /etc/ssl/certs/ca-certificates.crt 后面;

  • 使用 curl 进行验证:

    curl -v https://10.133.5.170
    
  • 正常情况下能够显示接收到的 html 内容,加入 -v 用于查看详细的过程信息:

    *   Trying 10.133.5.170:443...
    * TCP_NODELAY set
    * Connected to 10.133.5.170 (10.133.5.170) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    *   CAfile: /etc/ssl/certs/ca-certificates.crt
    CApath: /etc/ssl/certs
    * TLSv1.3 (OUT), TLS handshake, Client hello (1):
    * TLSv1.3 (IN), TLS handshake, Server hello (2):
    * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
    * TLSv1.3 (IN), TLS handshake, Certificate (11):
    * TLSv1.3 (IN), TLS handshake, CERT verify (15):
    * TLSv1.3 (IN), TLS handshake, Finished (20):
    * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
    * TLSv1.3 (OUT), TLS handshake, Finished (20):
    * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
    * ALPN, server accepted to use http/1.1
    * Server certificate:
    *  subject: C=AU; ST=Some-State; O=Internet Widgits Pty Ltd; CN=10.133.5.170
    *  start date: Mar 29 08:12:13 2022 GMT
    *  expire date: Mar 29 08:12:13 2023 GMT
    *  common name: 10.133.5.170 (matched)
    *  issuer: C=AU; ST=Some-State; O=Internet Widgits Pty Ltd; CN=10.133.5.170
    *  SSL certificate verify ok.
    > GET / HTTP/1.1
    > Host: 10.133.5.170
    > User-Agent: curl/7.68.0
    > Accept: */*
    

    可以看到 CAfile 签名证书是 /etc/ssl/certs/ca-certificates.crtCApath 目录是 /etc/ssl/certs

Https 原理

客户端在接受到服务端发来的 SSL 证书时,会对证书的真伪进行校验,以浏览器为例说明如下:

  1. 首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验;
  2. 浏览器开始查找操作系统中已内置的受信任的证书发布机构 CA,与服务器发来的证书中的颁发者 CA 比对,用于校验证书是否为合法机构颁发;
  3. 如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的;
  4. 如果找到,那么浏览器就会从操作系统中取出颁发者 CA 的公钥,然后对服务器发来的证书里面的签名进行解密;
  5. 浏览器使用相同的 hash 算法计算出服务器发来的证书的 hash 值,将这个计算的 hash 值与证书中签名做对比;
  6. 对比结果一致,则证明服务器发来的证书合法,没有被冒充;
  7. 此时浏览器就可以读取证书中的公钥,用于后续加密了。

常见问题

  1. 浏览器显示 Warning: Potential Security Risk Ahead

    • 点击 Advanced...Accept the Risk and Continue 按钮将证书加入到可信任的证书列表中
  2. 执行 curl 命令时报错 curl: (60) SSL certificate problem: self signed certificate

    • server.crt 的内容追加到 /etc/ssl/certs/ca-certificates.crt 后面。

参考

开启apache2的ssl访问功能
HTTPS系列干货(一):HTTPS 原理详解

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apache2 配置 HTTPS 的相关文章

  • PhantomJS 无法打开 HTTPS 站点

    我使用以下基于 loadspeed js 示例的代码来打开一个 https 站点 该站点也需要 http 服务器身份验证 var page require webpage create system require system t add
  • 使用 https 的 Java Jersey RESTful Web 服务

    我是 Java EE 的新手 正在开发一个 RESTful API 其中每个 API 调用用户都会发送编码的凭据 我的问题是如何通过默认的 http 实现 https 协议并确保我的连接安全 我正在使用 Jersey Restful Web
  • 使用普通用户和 https 的 gitea

    我正在尝试设置 gitea 以使用 https 和我从 LetsEncrypt 获得的证书 运行该服务作为普通用户 我已经让它与普通用户在端口 80 上使用 http 一起工作git并使用 iptables 将端口 80 重定向到端口 30
  • 具有自签名证书的 Alamofire / ServerTrustPolicy

    我想使用 Alamofire 通过带有自签名证书的 https 连接与我的服务器进行通信 我的环境在本地主机上运行 我尝试连接 但响应始终如下所示 Success false Response String nil 我用下面的代码完成了它
  • 在 Ubuntu 中执行 .cgi 文件

    我在 Ubuntu 下运行 Apache PHP 当我运行 cgi 文件时 通过http localhost mycgi cgi 浏览器将显示代码而不是运行它 如何让浏览器执行 CGI 文件而不是显示其内容 将这些行添加到您的 apache
  • IIS 8 HTTPS/需要 SSL 导致超时错误

    尝试通过 IIS 8 通过 SSL 发布网站 但出现超时错误 任何帮助表示赞赏 采取的步骤 已验证该网站可以通过 HTTP 访问 http xxx xxx xxx xxx有效 此时使用 IP 地址 如果重要的话 IIS gt 服务器证书 g
  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • 从 HTTPS 重定向到 HTTP 的安全问题?

    我在一些博客上读过 抱歉没有提及参考资料 但我找不到了 如果您将用户从 https 页面重定向到 http 页面 您将失去保护网站安全的所有工作 那么 有人可以向我解释一下在以下情况下我是对还是错 在登录页面上使用 https 然后使用 h
  • 如何禁用“您是否只想查看安全传送的网页内容”警告?

    我的网站有完整的 https 及其使用外部 jquery 资源 即 http 在 IE 8 中 当我重定向网站时 它给了我 您只想查看安全传送的网页内容 警告 如何避免这种情况 有没有可用的脚本可以解决这个问题 提前致谢 似乎有两个可能的问
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • https登录的安全性?

    我正在编写一个 Apple iOS 应用程序 用于登录帐户并获取一些余额 它使用纯 html 链接进行登录 用户名和密码在运行时动态加载到登录链接 我使用 Wireshark 嗅探了流量 但在发送的任何包中都找不到用户名或密码 我猜 htt
  • 有什么简单的方法可以完全忽略带有 java url 连接的 ssl ?

    我正在构建一个应用程序 定期检查一些 RSS 提要是否有新内容 其中一些提要只能通过 https 访问 有些具有自签名或以某种方式损坏的证书 我仍然希望能够检查它们 请注意 安全性在此应用程序中不是问题 目标是以最小的努力访问内容 我使用此
  • 使 .git 目录 web 不可访问

    我有一个网站 我使用 github 闭源 来跟踪更改和更新网站 唯一的问题是 git 目录似乎可以通过网络访问 我怎样才能停止这个并且仍然能够使用 git 我应该使用 htaccess 吗 我应该更改 git 的权限吗 把这个放在一个 ht
  • 当支持 SPDY 的浏览器收到 HTTP2 (H2) 响应时会发生什么?

    我的直觉是 支持 SPDY 的浏览器会将其视为 SPDY 响应 然而 我能找到的最多的是 H2 响应将优雅地降级到 HTTP1 1 的保证 我正在考虑以面向 H2 的方式提供资产 多个请求 无域分片等 但我确实需要支持一些非 H2 浏览器
  • 如何解决 302 重定向上的 POST 更改为 GET 的问题?

    我网站的某些部分只能通过 HTTPS 访问 不是整个网站 安全与性能妥协 并且如果通过纯 HTTP 发送请求 则 HTTPS 是通过对安全部分的请求进行 302 重定向来强制执行的 问题是对于所有主流浏览器来说 如果您在 POST 上执行
  • 如何向 node-http-proxy 响应添加标头

    我需要在第三方服务上解决CORS 所以我想构建一个代理来添加标头 Access Control Allow Origin 为什么这段代码没有添加标题 httpProxy require http proxy var URL https th
  • 有什么方法可以处理 ASP.Net MVC 中的 Put 和 Delete 动词吗?

    只是想知道是否有人知道真正宁静的 Put delete 实现 asp net mvc Preview 5 最好 查看 mvccontrib 项目 http www mvccontrib org http www mvccontrib org
  • 使用 mod_wsgi 在 Apache2 上部署 Django - Django 项目的位置正确吗?

    我正在尝试在我的网络服务器上部署我的第一个 Django 项目 我对服务器配置和 Django 都很陌生 所以我很难找到我的错误 在我在网上看到的大多数教程中 生产服务器上的 Django 项目是在 var www myproject 中创
  • 如何从内容处置中读取编码的文件名

    我得到的内容处置标头值如下 附件 文件名 UTF 8 album jpeg 如何从中提取文件名 album jpeg 在查看该值时 它具有编码格式值 使用Spring的内容配置 https docs spring io spring doc
  • 如何使用 HTTPS 云前端后面的 AWS Amazon 云前端将非 WWW 转发到 WWW

    我已经将 Cloud Front 设置为将所有调用重定向到 HTTPS 协议 现在我想将 非www 转发到www 就当前设置而言 我怎样才能实现这一目标 我尝试了下面的方法 但没有成功 因为该方法没有考虑 HTTPS 重定向 https w

随机推荐

  • 201609-3炉石传说——CCF试题2016年9月第三题

    问题描述 炉石传说 xff1a 魔兽英雄传 xff08 Hearthstone Heroes of Warcraft xff0c 简称炉石传说 xff09 是暴雪娱乐开发的一款集换式卡牌游戏 xff08 如下图所示 xff09 游戏在一个战
  • C语言打印宏定义/枚举变量 名称和变量值

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • File size exceeds....(文件大小超过限制处理)

    File size exceeds configured limit 2560000 Code insight features not available 原因 xff1a IDEA对能关联的文件大小做了限制 xff0c 主要是为了保护内
  • 第一章-介绍

    介绍 一般建议 什么是游戏引擎 什么是Godot 下载Godot 其他安装方法 Godot UI概述 Project Manager 选择文件名 编辑器窗口 关于节点和场景 Godot中的脚本 关于GDScript 总结 无论你是想要从事的
  • 安装ubuntu系统,报错WslRegisterDistribution failed with error: 0x8007019e

    在windows应用商店安装ubuntu系统 xff0c 报错WslRegisterDistribution failed with error 0x8007019e 1 报错 xff1a Installing this may take
  • 安装Anaconda后,发现文件缺少大量文件

    电脑崩溃修复后 xff0c 使用的Anaconda 居然也崩了 xff0c 重新安装后丢失很多文件 xff0c 然后就是重复的卸载 安装 卸载 xff0c 还是不行 xff0c 我的心态也快要崩了 xff0c 哎 xff0c 就下面图示一样
  • AutoMapping 9 使用入门

    AutoMapping 9语法更改 using AutoMapper using System using System Collections Generic using System Linq using System Text usi
  • Oracle在线练习

    oracle官方的服务 Live SQL xff0c 挺方便的 需要注册一个帐号 访问地址 xff1a https livesql oracle com apex livesql file index html https livesql
  • pyinstaller 打包取消命令行窗口弹出

    pyinstaller F w icon 61 photo ico test py w可以使得exe运行时不弹窗
  • c#有参构造函数中怎么调用其无参构造函数

    class A public A public A int A this 当A a 61 new A 1 时 会先调用无参数的构造函数 在调用有参数那个
  • 使用npm的一些问题

    npm切换为国内的数据源 npm config set registry https span class token punctuation span span class token operator span span class t
  • Caliburn.Micro将枚举 绑定到ComboBox

    参考 https stackoverflow com questions 47480725 caliburn micro enum binding in combobox 上面的文章详细地说明了CM的绑定原理和操作步骤 xff0c 但我需要
  • WPF DataGrid 获取多选项目

    解决方案 xff1a 先附上地址 xff1a https stackoverflow com questions 9880589 bind to selecteditems from datagrid or listbox in mvvm
  • 记一次netcore 3.1 发布失败

    VS版本 xff1a 2019 16 8 5 使用框架 xff1a netcore3 1 问题描述 xff1a 项目可以正常生成 xff0c 但部署模式为独立时 xff0c 不能发布 xff0c 部署模式为依赖框架 xff0c 可以发布 报
  • 在.NET中使用COM组件

    在 NET中使用COM组件 文章目录 在 NET中使用COM组件早期绑定COM对象为COM类型库生成互操作程序集使用COM组件 后期绑定COM对象通过与非托管代码互操作创建COM对象通过平台调用创建COM对象通过C 43 43 Intero
  • Go语言生成dll

    GO语言生成dll 环境dll代码编译调试 环境 操作系统 xff1a win7 64位 go版本 xff1a 1 17 gcc版本 xff1a Thread model win32 gcc version 8 1 0 x86 64 win
  • 腾讯云轻量应用服务器配置https踩坑

    服务器里有许多应用模板 xff0c 这些应用装上应可以运行 xff0c 非常方便 xff0c 但配置https踩了许多坑 xff0c 记录一下吧 以WordPress 腾讯云插件版为例 xff0c 应用信息如下 SSL证书安装 点击Ngin
  • 微信支付宝扫码支付简介

    微信平台 支付模式 付款码支付Native支付JSAPI支付APP支付H5支付小程序支付 各种模式的定义可以查看微信官方文档 这里应用Native支付 xff0c 它是商户系统按微信支付协议生成支付二维码 xff0c 用户再用微信 扫一扫
  • C++十六进制转十进制

    方法一 span class token macro property span class token directive hash span span class token directive keyword include span
  • Apache2 配置 HTTPS

    文章目录 自签名 CA 证书服务器部署 HTTPS客户端验证Https 原理 常见问题参考 自签名 CA 证书 生成密钥 使用 128 位的 RSA 算法生成的密钥 xff0c 4096 是密钥的长度 xff0c 建议使用 4096 或以上