在用C编写的Apache2模块的上下文中,如何确定请求(request_rec * r)是否已加密?我看过似乎可以做到这一点的代码,但是我要么无法弄清楚如何实现它,要么即使在未加密的连接上也总是返回“ true”。
在PHP中,如果使用HTTPS,则$_SERVER['HTTPS']
设置为'on'。
答案 0 :(得分:1)
在您自己的模块中定义
RDD2
因此您可以使用
来测试请求static int is_https(conn_rec *c)
{
int (*is_https_conn)(conn_rec *c);
is_https_conn = APR_RETRIEVE_OPTIONAL_FN(ssl_is_https);
if (is_https_conn)
return is_https_conn(c);
return 0;
}
是否使用SSL / TLS连接
request_rec *r
该逻辑基于SSL / TLS模块使用if (is_https(r->connection)) {
/* Yes, request is via an SSL/TLS-encrypted connection */
} else {
/* No, the request is not via an encrypted connection */
}
在modules/ssl/ssl_engine_vars.c:ssl_var_register()中注册功能APR_REGISTER_OPTIONAL_FN(ssl_is_https)
的事实。该函数接受一个连接(ssl_is_https()
,如果该连接使用SSL / TLS加密(HTTPS),则返回非零。
我们使用conn_rec *
检索指向所述函数的指针。如果未注册,则返回NULL(然后显然无法加密任何连接)。如果它返回非NULL指针,则我们调用该函数。如果连接是HTTPS,它将返回非零值。