2

如何在 Apache 和 Nginx 上配置 OCSP Stapling

 1 year ago
source link: https://blog.p2hp.com/archives/10802
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

介绍

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

关于 OCSP

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

OCSP URI

关于 OCSP 装订

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

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

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

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

检查 OCSP 装订支持

支持 OCSP 装订

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

apache2 -v

Nginx:

nginx -v

CentOS/Fedora 用户替换apache2httpd.

检索 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写入文件,因此您可以sudo tee在以非根用户身份登录时使用。

在 Apache 上配置 OCSP 装订

编辑 SSL 虚拟主机文件并将这些行放在指令中。

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

必须在外部 指定缓存位置。

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


    SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
    

            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
    

做一个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;
}

做一个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'

替换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 测试

要在线查看此信息,请访问此网站并输入您的域名。一旦测试完成,请在“协议详细信息”部分下进行检查。

Qualys SSL 报告

补充阅读


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK