Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ No directives yet.

### Variables

#### $http_ssl_ja3

The ja3 fingerprint string for a SSL connection for a HTTP server.

```
771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53-10,0-23-65281-10-11-35-16-5-13-18-51-45-43-21,0-29-23-24,0
```

#### $http_ssl_ja3_hash

The ja3 fingerprint MD5 hash for a SSL connection for a HTTP server.
Expand All @@ -29,11 +37,15 @@ http {
ssl_certificate cert.pem;
ssl_certificate_key rsa.key;
error_log /dev/stderr debug;
return 200 "$time_iso8601-$http_ssl_ja3_hash\n";
return 200 "$time_iso8601\n\n$http_user_agent\n\n$http_ssl_ja3\n\n$http_ssl_ja3_hash\n";
}
}
```

#### $stream_ssl_ja3

The ja3 fingerprint string for a SSL connection for a stream server.

#### $stream_ssl_ja3_hash

The ja3 fingerprint MD5 hash for a SSL connection for a stream server.
Expand All @@ -47,7 +59,7 @@ stream {
ssl_certificate cert.pem;
ssl_certificate_key rsa.key;
error_log /dev/stderr debug;
return "$time_iso8601-$stream_ssl_ja3_hash\n";
return "$time_iso8601\n\n$stream_ssl_ja3\n\n$stream_ssl_ja3_hash\n";
}
}
```
Expand Down
4 changes: 2 additions & 2 deletions docker/debian-nginx-ssl-ja3/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ http {
ssl_certificate cert.pem;
ssl_certificate_key rsa.key;
error_log /dev/stderr debug;
return 200 "$time_iso8601-$http_ssl_ja3_hash\n";
return 200 "$time_iso8601\n\n$http_user_agent\n\n$http_ssl_ja3\n\n$http_ssl_ja3_hash\n";
}
}

Expand All @@ -22,6 +22,6 @@ stream {
ssl_certificate cert.pem;
ssl_certificate_key rsa.key;
error_log /dev/stderr debug;
return "$time_iso8601-$stream_ssl_ja3_hash\n";
return "$time_iso8601\n\n$stream_ssl_ja3\n\n$stream_ssl_ja3_hash\n";
}
}
31 changes: 30 additions & 1 deletion src/ngx_http_ssl_ja3_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ ngx_module_t ngx_http_ssl_ja3_module = {
NGX_MODULE_V1_PADDING
};


static ngx_int_t
ngx_http_ssl_ja3_hash(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
Expand Down Expand Up @@ -112,6 +111,31 @@ ngx_http_ssl_ja3_hash(ngx_http_request_t *r,
return NGX_OK;
}

static ngx_int_t
ngx_http_ssl_ja3(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
ngx_ssl_ja3_t ja3;
ngx_str_t fp = ngx_null_string;

if (r->connection == NULL) {
return NGX_OK;
}

if (ngx_ssl_ja3(r->connection, r->pool, &ja3) == NGX_DECLINED) {
return NGX_ERROR;
}

ngx_ssl_ja3_fp(r->pool, &ja3, &fp);

v->data = fp.data;
v->len = fp.len;
v->valid = 1;
v->no_cacheable = 1;
v->not_found = 0;

return NGX_OK;
}

static ngx_http_variable_t ngx_http_ssl_ja3_variables_list[] = {

Expand All @@ -120,6 +144,11 @@ static ngx_http_variable_t ngx_http_ssl_ja3_variables_list[] = {
ngx_http_ssl_ja3_hash,
0, 0, 0
},
{ ngx_string("http_ssl_ja3"),
NULL,
ngx_http_ssl_ja3,
0, 0, 0
},

};

Expand Down
30 changes: 30 additions & 0 deletions src/ngx_stream_ssl_ja3_preread_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,31 @@ ngx_stream_ssl_ja3_hash(ngx_stream_session_t *s,
return NGX_OK;
}

static ngx_int_t
ngx_stream_ssl_ja3(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data)
{
ngx_ssl_ja3_t ja3;
ngx_str_t fp = ngx_null_string;

if (s->connection == NULL) {
return NGX_OK;
}

if (ngx_ssl_ja3(s->connection, s->connection->pool, &ja3) == NGX_DECLINED) {
return NGX_ERROR;
}
ngx_ssl_ja3_fp(s->connection->pool, &ja3, &fp);

v->data = fp.data;
v->len = fp.len;
v->valid = 1;
v->no_cacheable = 1;
v->not_found = 0;

return NGX_OK;
}


static ngx_stream_variable_t ngx_stream_ssl_ja3_variables_list[] = {

Expand All @@ -117,6 +142,11 @@ static ngx_stream_variable_t ngx_stream_ssl_ja3_variables_list[] = {
ngx_stream_ssl_ja3_hash,
0, 0, 0
},
{ ngx_string("stream_ssl_ja3"),
NULL,
ngx_stream_ssl_ja3,
0, 0, 0
},

};

Expand Down