如何在 Apache 和 Nginx 上配置 OCSP 装订

2023-11-18

介绍

OCSP 装订是一种 TLS/SSL 扩展,旨在提高 SSL 协商的性能,同时维护访问者隐私。在继续配置之前,先简要介绍一下证书吊销的工作原理。本文使用免费证书由 StartSSL 发出来演示。

本教程将使用下面概述的 Apache 和 Nginx 的基本配置:

  • 如何在 Ubuntu 12.04 上使用 Apache 在一个 IP 上设置多个 SSL 证书
  • 如何在 Ubuntu 12.04 上使用 Nginx 在一个 IP 上设置多个 SSL 证书

关于OCSP

OCSP(在线证书状态协议)是用于检查 SSL 证书是否已被吊销的协议。它是作为 CRL 的替代方案创建的,以减少 SSL 协商时间。使用 CRL(证书吊销列表),浏览器会下载已吊销的证书序列号列表并验证当前证书,这会增加 SSL 协商时间。在 OCSP 中,浏览器向 OCSP URL 发送请求并接收包含证书有效性状态的响应。以下屏幕截图显示了 OCSP URI数字海洋网.

OCSP URI

关于 OCSP 装订

OCSP 有两个主要问题:隐私和 CA 服务器负载过重。

由于 OCSP 要求浏览器联系 CA 来确认证书有效性,因此会损害隐私。 CA 知道正在访问哪个网站以及谁访问了该网站。

如果 HTTPS 网站有大量访问者,CA 的 OCSP 服务器必须处理访问者发出的所有 OCSP 请求。

When OCSP stapling is implemented the certificate holder (read web server) queries the OCSP server themselves and caches the response. This response is “stapled” with the TLS/SSL Handshake via the Certificate Status Request extension response. As a result the CA’s servers are not burdened with requests and browsers no longer need to disclose users’ browsing habits to any third party.

检查 OCSP 装订支持

支持 OCSP 装订

  • Apache HTTP 服务器 (>=2.3.3)
  • Nginx (>=1.3.7)

在继续之前,请使用以下命令检查安装的版本。

Apache:

apache2 -v

Nginx:

nginx -v

CentOS/Fedora用户更换apache2 with httpd.

检索 CA 捆绑包

检索 PEM 格式的根 CA 和中间 CA 的证书并将它们保存在单个文件中。这适用于 StartSSL 的根 CA 证书和中间 CA 证书。

cd /etc/ssl
wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem> /dev/null

如果您的 CA 提供 DER 格式的证书,请将其转换为 PEM。例如,DigiCert 提供 DER 格式的证书。要下载它们并转换为 PEM,请使用以下命令:

cd /etc/ssl
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null
wget -O - https://www.digicert.com/CACerts/DigiCertHighAssuranceEVCA-1.crt | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem> /dev/null

两组命令都使用tee写入文件,这样你就可以使用sudo tee如果以非 root 用户身份登录。

在 Apache 上配置 OCSP 装订

Edit the SSL virtual hosts file and place these lines inside the <VirtualHost></VirtualHost> directive.

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLCACertificateFile /etc/ssl/ca-certs.pem
SSLUseStapling on

A cache location has to be specified outside <VirtualHost></VirtualHost>.

sudo nano /etc/apache2/sites-enabled/example.com-ssl.conf
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

如果你关注了本文要在 Apache 上设置 SSL 站点,虚拟主机文件将如下所示:

/etc/apache2/sites-enabled/example.com-ssl.conf

<IfModule mod_ssl.c>
    SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
    <VirtualHost *:443>

            ServerAdmin webmaster@localhost
            ServerName example.com
            DocumentRoot /var/www

            SSLEngine on

            SSLCertificateFile /etc/apache2/ssl/example.com/apache.crt
            SSLCertificateKeyFile /etc/apache2/ssl/example.com/apache.key

            SSLCACertificateFile /etc/ssl/ca-certs.pem
            SSLUseStapling on
    </VirtualHost>
</IfModule>

Do a configtest检查错误。

apachectl -t

重新加载如果Syntax OK被展示。

service apache2 reload

使用IE(Vista及以上版本)或Firefox 26+访问网站并查看错误日志。

tail /var/log/apache2/error.log

如果文件中定义SSLCACertificateFile缺少指令,证书会显示类似于以下内容的错误。

[Fri May 09 23:36:44.055900 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02217: ssl_stapling_init_cert: Can't retrieve issuer certificate!
[Fri May 09 23:36:44.056018 2014] [ssl:error] [pid 1491:tid 139921007208320] AH02235: Unable to configure server certificate for stapling

如果没有显示此类错误,请继续执行最后一步。

在 Nginx 上配置 OCSP 装订

编辑 SSL 虚拟主机文件并将以下指令放入server {}部分。

sudo nano /etc/nginx/sites-enabled/example.com.ssl
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;

如果你关注了本文要在 Nginx 上设置 SSL 主机,完整的虚拟主机文件将如下所示:

/etc/nginx/sites-enabled/example.com.ssl

server {

        listen   443;
        server_name example.org;

        root /usr/share/nginx/www;
        index index.html index.htm;

        ssl on;
        ssl_certificate /etc/nginx/ssl/example.org/server.crt;
        ssl_certificate_key /etc/nginx/ssl/example.org/server.key;

        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/ssl/private/ca-certs.pem;
}

Do a configtest看看一切是否正确。

service nginx configtest

然后重新加载nginx服务。

service nginx reload

使用IE(Vista及以上版本)或Firefox 26+访问网站并查看错误日志。

tail /var/log/nginx/error.log

如果文件中定义ssl_trusted_certificate缺少证书,会显示类似以下内容的错误:

2014/05/09 17:38:16 [error] 1580#0: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get local issuer certificate) while requesting certificate status, responder: ocsp.startssl.com

如果没有显示此类错误,请继续执行下一步。

测试 OCSP 装订

将解释两种测试 OCSP 装订是否正常工作的方法 -opensslQualys 的命令行工具和 SSL 测试。

OpenSSL 命令

此命令的输出显示一个部分,说明您的 Web 服务器是否响应了 OCSP 数据。我们grep这个特定的部分并显示它。

echo QUIT | openssl s_client -connect www.digitalocean.com:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

Replace www.digitalocean.com与您的域名。如果 OCSP 装订正常工作,则会显示以下输出。

OCSP response:
======================================
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response
    Version: 1 (0x0)
    Responder Id: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
    Produced At: May  9 08:45:00 2014 GMT
    Responses:
    Certificate ID:
      Hash Algorithm: sha1
      Issuer Name Hash: B8A299F09D061DD5C1588F76CC89FF57092B94DD
      Issuer Key Hash: 4C58CB25F0414F52F428C881439BA6A8A0E692E5
      Serial Number: 0161FF00CCBFF6C07D2D3BB4D8340A23
    Cert Status: good
    This Update: May  9 08:45:00 2014 GMT
    Next Update: May 16 09:00:00 2014 GMT

如果 OCSP 装订不起作用,则不会显示任何输出。

Qualys 在线 SSL 测试

To check this online go to this website and enter your domain name. Once testing completes check under the Protocol Details section.

Qualys SSL report

补充阅读

  • Mozilla 关于 OCSP 装订的文章 -http://en.wikipedia.org/wiki/OCSP_stapling
  • 关于 OCSP 装订的维基百科文章 -http://en.wikipedia.org/wiki/OCSP_stapling
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Apache 和 Nginx 上配置 OCSP 装订 的相关文章

  • Nginx 是否也缓冲来自客户端的 http 请求?

    我知道 Nginx 可以缓冲来自上游服务器的响应 我的问题是 Nginx 是否也缓冲来自客户端的 http 请求 我的意思是 如果 Nginx 从客户端收到 http 请求 它是否立即与上游服务器建立连接 或者它会在收到整个http请求后创
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • 未加载 Firebird 扩展

    我正在尝试在 PHP 中使用 Firebird 扩展 我有扩展文件 php pdo firebird dll php interbase dll in my ext文件夹 我将它们添加到我的php ini像这样文件 PHP PDO FIRE
  • 防止隐藏的输入被更改

    这一直让我压力很大 我有一个隐藏的输入
  • Apache mod_rewrite 将双斜杠转换为单斜杠

    我有一个像这样的网址 http example com img php url http example2 com path to image name jpg 所以我通过这个问题创建了一条规则Apache mod rewrite 复杂 U
  • 将 Node.js(用于实时通知)添加到现有 PHP 应用程序

    我有一个现有的 PHP 应用程序 我需要向其中添加实时通知 为了实现这一点 我安装了node js 打算添加socket io以实现所有实时功能 然而 尽管在过去的三个小时里研究并试图弄清楚如何将两者结合起来 但我发现自己并没有更接近于获得
  • proc_open() 失败并显示“权限被拒绝”

    我正在尝试使用proc open 执行程序并打印结果 但是 我不断收到 许可被拒绝 的消息 已将脚本和可执行文件的 chmod 设置为 0777 但无济于事 ini get safe mode 是假的 可能出什么问题了 我正在使用 Cent
  • 将 CCtray 与 Jenkins 结合使用,同时启用安全性(使用 HTTPS)

    我将 Jenkins 服务器配置为仅使用 HTTPS 并启用安全性 我也不喜欢任何未登录的人查看仪表板 即使它是空的 在这里 我禁用了 匿名 的 读取 访问权限 到目前为止 所有这些都完全符合我的喜好 但想要通过例如向远程客户端添加一些构建
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 正则表达式捕获和替换可以与 Apache DirectoryMatch 指令一起使用吗?

    有谁知道是否可以在 Apache 的 DirectoryMatch 指令中使用正则表达式捕获 我想做类似以下的事情
  • 抑制 nginx 访问被拒绝错误日志

    我在 nginx 中设置了一些规则来拒绝 IP 访问 这很有效 但对于来自被拒绝 IP 的每个请求 都会记录以下开头的错误 error 7325 0 5761 access forbidden by rule client 有没有办法抑制这
  • Apache 虚拟主机始终重定向到 /dashboard

    我遇到的问题似乎是一个常见问题 但我找到的任何解决方案似乎都不适合我的情况 我正在尝试设置一个虚拟主机 以便我可以通过 mytestdomain local 访问我的 Laravel 安装的公共文件 但是当我在 google chrome
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 使用 WSGI 在 Windows XAMPP 中设置 Python 路径

    我正在 Webfaction 上设置实时服务器的开发版本 在本地计算机上的虚拟 Apache 服务器环境 运行没有任何错误 中运行 Django 应用程序 XP 使用 Python 2 6 运行 XAMPP Lite 我可以提交更改通过 G
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • 在 docker 中将 pgadmin 连接到 postgres

    我有一个docker compose与服务文件python nginx postgres and pgadmin services postgres image postgres 9 6 env file env volumes postg
  • 无法更改 Xampp 中的 Apache 端口号

    我刚刚下载了Xampp服务器xampp win32 1 8 2 0 VC9 zip http www apachefriends org en xampp windows html 641文件 Windows 并尝试启动 apache 服务
  • ajax 会增加还是降低安全性?

    我正在创建一个网站 到目前为止它是纯 PHP 的 我在想 既然很少有人没有启用 JavaScript 我想知道为什么 也许我应该将我的网站创建为一个完全 PHP 的网站 而不使用任何 AJAX 难道是我想错了 可以肯定的是 如果我实施一些
  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give

随机推荐

  • 如何在 CentOS 7 上安装 Git

    介绍 版本控制已成为现代软件开发中不可或缺的工具 版本控制系统允许您在源代码级别跟踪您的软件 您可以跟踪更改 恢复到之前的阶段以及从基本代码分支以创建文件和目录的替代版本 最流行的版本控制系统之一是git 许多项目在 Git 存储库中维护其
  • 什么是 Kubernetes?

    介绍 Kubernetes 是一个功能强大的开源系统 最初由 Google 开发 并得到云原生计算基金会 CNCF 的支持 用于在集群环境中管理容器化应用程序 它旨在提供更好的方法来管理跨不同基础设施的相关分布式组件和服务 要了解有关 Ku
  • 使用 Debian 9 进行初始服务器设置

    介绍 当您首次创建新的 Debian 9 服务器时 您应该尽早执行一些配置步骤作为基本设置的一部分 这将提高服务器的安全性和可用性 并为您后续的操作奠定坚实的基础 第一步 以 root 身份登录 要登录您的服务器 您需要知道您的服务器的公共
  • 如何使用 DigitalOcean 云服务器创建虚荣或品牌名称服务器

    介绍 托管提供商或经销商特别感兴趣 拥有品牌或 虚荣域名服务器为客户提供了更专业的外观 它 无需要求您的客户将其域名指向另一个域名 公司的域名服务器 本教程将概述两种创建方法 自定义域名服务器 i 虚荣和 ii 品牌 Types 虚荣名称服
  • 如何在 Ubuntu 18.04 上安装 MySQL

    本教程的先前版本由以下人员编写榛子维尔多 介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LAMP Linux Apache MySQL PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来
  • 如何使用 passwd 和 adduser 在 Linux VPS 上管理密码

    介绍 密码和身份验证是每个用户在 Linux 环境中工作时必须处理的概念 这些主题涵盖许多不同的配置文件和工具 在本指南中 我们将探索一些基本文件 例如 etc passwd 和 etc shadow 以及用于配置身份验证的工具 例如名称恰
  • 如何在 VPS 上安装和使用 Logwatch 日志分析器和报告器

    介绍 应用程序创建所谓的 日志文件 来跟踪在任何给定时间发生的活动 这些文件远非简单的文本输出 浏览起来可能非常复杂 特别是当所管理的服务器很繁忙时 当需要参考日志文件时 例如 在发生故障 数据丢失等情况下 利用所有可用的帮助变得至关重要
  • 如何修改 DOM 中的属性、类和样式

    介绍 在本教程之前的教程中series 如何更改 DOM 我们介绍了如何使用内置方法从文档对象模型 DOM 中创建 插入 替换和删除元素 通过提高操作 DOM 的熟练程度 您可以更好地利用 JavaScript 的交互功能并修改 Web 元
  • 如何在 Ubuntu 22.04 上的 PostgreSQL 中静态加密数据库

    介绍 PostgreSQL是一个数据库管理系统 自 1996 年以来一直存在 就像其他数据库系统一样 SQL MySQL Oracle等 PostgreSQL的主要目的是为用户提供一种创建数据库用于存储和数据检索的方式 其突出的功能之一包括
  • 如何在 Ubuntu 12.04 上使用 Iptables 设置防火墙

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Java 中的死锁示例

    java中的死锁是两个或多个线程永远被阻塞的一种编程情况 Java 死锁情况发生在至少两个线程和两个或更多资源的情况下 这里我写了一个简单的程序 该程序会导致java死锁场景 然后我们将看到如何分析它 Java 中的死锁 Let s hav
  • 深入探讨 Iptables 和 Netfilter 架构

    介绍 防火墙是一个重要的工具 可以配置它来保护您的服务器和基础设施 在Linux生态系统中 iptables是一种广泛使用的防火墙工具 与内核一起工作netfilter数据包过滤框架 由于复杂的语法和涉及的相互关联部分的数量 创建可靠的防火
  • 如何使用 Dovecot 设置 Postfix 电子邮件服务器:动态 Maildirs 和 LMTP

    Preface 本教程基于如何使用 Dovecot 设置 Postfix 电子邮件服务器并从第一部分结束的地方开始 请先阅读该教程 在本文中 我们将使用 dovecot 的 LMTP 服务器作为传递机制将邮箱与系统帐户分离 并使用 post
  • Java ArrayList 的数组、ArrayList 的 Array

    今天我们将学习如何创建Java数组ArrayList 我们还将学习如何创建数组元素的 ArrayList Java ArrayList 的数组 Creating array of list in java is not complex Be
  • 如何将本地 Django 应用程序部署到 VPS

    先决条件 本教程假设您已经使用所选操作系统设置了虚拟专用服务器 本教程使用 Debian 7 Ubuntu 也可以 如果您还没有这样做 您可以按照此操作tutorial 在开始之前 请确保您的云服务器已正确配置为托管 Django 应用程序
  • 如何在 Arch Linux 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    关于兰普 LAMP 堆栈是一组用于启动和运行 Web 服务器的开源软件 该缩写词代表 Linux Apache MySQL 和 PHP Arch Linux 使用功能强大的 Pacman 安装程序 只需一个命令即可下载每个程序所需的所有最新
  • JSON 服务器(json-server)

    今天我们将研究一个非常方便的工具 json server 它可以在一分钟内为您提供一个模拟的 Rest json 服务器 在常规企业应用程序中 您需要与许多团队和第三方 API 合作 想象一下您必须致电第三方宁静的网络服务这将使您能够处理
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • java中的静态关键字

    Java中的static关键字在java编程中被大量使用 Java static关键字用于在java中创建类级别变量 静态变量和方法是类的一部分 而不是类的实例 java中的静态关键字 Java static keyword can be
  • 如何在 Apache 和 Nginx 上配置 OCSP 装订

    介绍 OCSP 装订是一种 TLS SSL 扩展 旨在提高 SSL 协商的性能 同时维护访问者隐私 在继续配置之前 先简要介绍一下证书吊销的工作原理 本文使用免费证书由 StartSSL 发出来演示 本教程将使用下面概述的 Apache 和