如何在 Apache 和 Nginx 上配置 OCSP Stapling

简介: 如何在 Apache 和 Nginx 上配置 OCSP Stapling

简介

OCSP stapling 是一个旨在提高 SSL 协商性能并保持访问者隐私的 TLS/SSL 扩展。在继续配置之前,先简要介绍一下证书吊销的工作原理。本文将使用 StartSSL 颁发的免费证书进行演示。

本教程将使用以下 Apache 和 Nginx 的基本配置:

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

关于 OCSP

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

!OCSP URI

关于 OCSP stapling

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

由于 OCSP 需要浏览器联系 CA 来确认证书的有效性,这会损害隐私。CA 知道正在访问的网站以及谁在访问。

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

当实现了 OCSP stapling 时,证书持有者(即 Web 服务器)自己查询 OCSP 服务器并缓存响应。这个响应通过 TLS/SSL 握手与 证书状态请求 扩展响应“装订”在一起。因此,CA 的服务器不再承担请求的负担,浏览器也不再需要向任何第三方披露用户的浏览习惯。

检查 OCSP stapling 支持

OCSP stapling 支持以下平台:

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

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

Apache:

apache2 -v

Nginx:

nginx -v

对于 CentOS/Fedora 用户,请将 apache2 替换为 httpd

检索 CA 绑定

以 PEM 格式检索根 CA 和中间 CA 的证书,并将它们保存在一个文件中。这是针对 StartSSL 的根和中间 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 写入文件,因此如果以非 root 用户登录,可以使用 sudo tee

在 Apache 上配置 OCSP Stapling

编辑 SSL 虚拟主机文件,并将以下行放置在 <VirtualHost></VirtualHost> 指令内部。

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

必须在 <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>

执行 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 Stapling

编辑 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;
}

执行 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 Stapling

将解释两种方法来测试 OCSP stapling 是否正常工作 - openssl 命令行工具和 Qualys 的 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'

www.digitalocean.com 替换为您的域名。如果 OCSP stapling 正常工作,则会显示以下输出。

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 stapling 未正常工作,则不会显示任何输出。

Qualys 在线 SSL 测试

要在线检查,请转到此网站并输入您的域名。测试完成后,请在 Protocol Details 部分检查。


目录
相关文章
|
缓存 应用服务中间件 网络安全
如何使用OCSP进行证书验证
如何使用OCSP进行证书验证
860 4
|
缓存 应用服务中间件 网络安全
SSL证书启用 OCSP Stapling(OCSP装订)
启用 OCSP Stapling 可以提高 HTTPS 连接的性能和安全性。ssl_stapling on;:启用 OCSP Stapling。服务器会缓存并提供证书的 OCSP 响应,而不是让每个客户端单独请求证书颁发机构。ssl_stapling_verify on;:启用 OCSP Stapling 响应的验证,确保服务器提供的 OCSP 响应是有效的。
709 0
|
安全 应用服务中间件 网络安全
密码学系列之:在线证书状态协议OCSP详解
我们在进行网页访问的时候会跟各种各样的证书打交道,比如在访问https网页的时候,需要检测https网站的证书有效性。 OCSP就是一种校验协议,用于获取X.509数字证书的撤销状态。它是为了替换CRL而出现的。 本文将会详细介绍OCSP的实现和优点。
密码学系列之:在线证书状态协议OCSP详解
|
网络协议 应用服务中间件 网络安全
panic:runtime error:invalid memory address or nil pointer dereference
panic:runtime error:invalid memory address or nil pointer dereference
|
Linux 数据安全/隐私保护 Perl
CentOS7中升级OpenSSL详细教程
这篇文章提供了在CentOS 7系统中升级OpenSSL到3.2版本的详细步骤,包括备份现有配置、安装依赖、下载安装新版本以及验证安装结果。
4157 3
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
5485 8
|
6月前
|
安全 Java API
Spring Boot 4 升级实战:从3.x到4.0的分步升级保姆级指南
Spring Boot 4.0于2025年11月发布,基于Spring Framework 7.0,实现模块化(47个轻量自动配置)、JSpecify空安全校验、原生API版本控制等重大升级。镜像减19%、启动快33%,迁移平滑,3.5.x支持至2026年11月。(239字)
5957 1
|
10月前
|
canal 关系型数据库 MySQL
数据同步神器-Canal
Canal是阿里巴巴开源的MySQL增量日志解析工具,通过模拟MySQL主从复制机制,实时捕获数据库变更,实现数据同步至Kafka、Elasticsearch等系统,广泛应用于数据同步、监控、备份与迁移场景。
7428 5
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
16672 2

热门文章

最新文章