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

如何确定连接是否使用来自apache2 httpd模块的加密/SSL?,c,apache,https,apache-modules,C,Apache,Https,Apache Modules,在用C编写的Apache2模块的上下文中,如何确定请求(request_rec*r)是否加密?我见过这样做的代码,但我要么没有弄清楚如何实现它,要么它总是返回“true”,即使在未加密的连接上也是如此 在PHP中,如果使用HTTPS,$\u服务器['HTTPS']将设置为“开”。在您自己的模块中,定义 #include <mod_ssl.h> static int is_https(conn_rec *c) { int (*is_https_conn)(conn_rec *

在用C编写的Apache2模块的上下文中,如何确定请求(request_rec*r)是否加密?我见过这样做的代码,但我要么没有弄清楚如何实现它,要么它总是返回“true”,即使在未加密的连接上也是如此


在PHP中,如果使用HTTPS,
$\u服务器['HTTPS']
将设置为“开”。

在您自己的模块中,定义

#include <mod_ssl.h>

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模块使用
APR\u REGISTER\u OPTIONAL\u FN(SSL\u is\u https)
在中注册函数
SSL\u is\u https()。此函数接受连接(
conn\u rec*
),如果连接使用SSL/TLS加密(HTTPS),则返回非零

我们使用
APR\u RETRIEVE\u OPTIONAL\u FN(ssl\u是\u https)
来检索指向所述函数的指针。如果未注册,则返回NULL(显然,无法加密任何连接)。如果它返回一个非空指针,我们调用该函数。如果连接是HTTPS,它将返回非零

if (is_https(r->connection)) {
   /* Yes, request is via an SSL/TLS-encrypted connection */
} else {
   /* No, the request is not via an encrypted connection */
}