如何确定连接是否使用了来自apache2 httpd模块的加密/ SSL?

时间:2018-07-10 05:38:38

标签: c apache https

在用C编写的Apache2模块的上下文中,如何确定请求(request_rec * r)是否已加密?我看过似乎可以做到这一点的代码,但是我要么无法弄清楚如何实现它,要么即使在未加密的连接上也总是返回“ true”。

在PHP中,如果使用HTTPS,则$_SERVER['HTTPS']设置为'on'。

1 个答案:

答案 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,它将返回非零值。