如何在Apache和Nginx的配置OCSP Stapling

介绍

OCSP Stapling是一个TLS / SSL扩展,旨在提高SSL协商的性能,同时保持访问者的隐私。 在继续配置之前,简要介绍证书撤销的工作原理。 本文使用免费的证书由startssl如果出具证明。

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

关于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 Stapling时,证书持有者(读取web服务器)查询OCSP服务器自身并缓存响应。 这种反应是“Stapling”通过证书状态请求延长响应TLS / SSL握手。 因此,CA的服务器不会受到请求的负担,浏览器不再需要向任何第三方披露用户的浏览习惯。

检查OCSP Stapling支持

支持OCSP Stapling

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

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

Apache:

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如果登录作为一个非root用户。

在Apache上配置OCSP订书机

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

如果按照本文设置SSL主机上的Nginx的完整的虚拟主机文件看起来像这样:

/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测试

要检查这个网上去这个网站 ,并输入你的域名。 一旦测试完成根据协议细节部分进行检查。

Qualys SSL报告

附加阅读

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏