nginx代理不缓存OCSP响应

时间:2013-05-08 15:03:22

标签: nginx proxy pki ocsp

我想在OCSP响应器前使用nginx作为缓存代理。 '使用POST方法的OCSP请求构造如下:Content-Type头的值为“application / ocsp-request”,而消息的主体是OCSPRequest的DER编码的二进制值。 (来自RFC2560)

因此,我按如下方式配置了nginx:

proxy_cache_path  /tmp/nginx/cache levels=1:2 keys_zone=my-cache:8m max_size=1000m inactive=600m;
server {
        # Make site accessible from http://localhost/
        server_name localhost;
        location / {
                proxy_pass  http://213.154.225.237:80; #ocsp.cacert.org
                proxy_cache my-cache;
                proxy_cache_methods    POST;
                proxy_cache_valid  200 302  60m;
                proxy_cache_valid  404      1m;
                proxy_cache_key        "$uri$request_body";
                expires off;
                proxy_set_header        Host            $host;
                proxy_set_header        X-Real-IP       $remote_addr;
        }
)

我可以通过nginx访问OCSP响应器,并按预期收到响应 - 没问题。 问题是nginx没有缓存响应。作为请求的一部分,不会发送随机数。使用Wireshark我验证了我的所有请求都是相同的(在HTTP层上)。如何配置缓存响应的nginx?

注意,我使用以下命令进行测试:

openssl ocsp -issuer cacert.crt -no_nonce -CAfile CAbundle.crt -url http://localhost/ -serial <SERIAL>

3 个答案:

答案 0 :(得分:1)

缓存OCSP响应还有很多,而不仅仅是缓存它们所构成的DER。查看轻量级OCSP配置文件,确保响应者确实在响应中包含必要的标头。

我建议您使用专门构建的OCSP代理缓存,其中有很多。例如,Axway的Validation Authority Repeater是一个不错的选择。

答案 1 :(得分:0)

与此同时,我在邮件列表中得到了答案,解决了我的问题:

  

您的配置不包含proxy_cache_valid(请参阅   http://nginx.org/r/proxy_cache_valid),并在同一时间通过   proxy_ignore_headers它忽略了可能用于的所有标头   根据响应头设置响应有效性。也就是说,没有   响应将使用上面的配置进行缓存。

     

您可能想要添加类似

的内容      

proxy_cache_valid 200 1d;

     

到你的配置。

答案 2 :(得分:0)

我的完整配置示例(适用于 openca-ocsp):

nginx.conf:

proxy_cache_path /var/cache/nginx/ocsp levels=1:2 min_free=1024M keys_zone=ocsp:10m;

conf.d/ocsp.conf

server {
    listen 80;
    proxy_cache ocsp;
    proxy_cache_valid 200 404 2m;
    proxy_cache_min_uses 1;
    proxy_ignore_headers    X-Accel-Expires Expires Cache-Control;
    proxy_cache_methods  POST;
    proxy_cache_key "$request_uri|$request_body";
    add_header X-GG-Cache-Status $upstream_cache_status;
    location = /ocsp {
        # Allow only POST
        limit_except POST {
         deny all;
        }
        proxy_pass http://ocspd:2560/;
    }
}