我想在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>
答案 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/;
}
}