mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Add ability to check if hostname is valid for a specific cert
This commit adds two new bifs, x509_check_hostname and x509_check_cert_hostname. These bifs can be used to check if a given hostname which can, e.g., be sent in a SNI is valid for a specific certificate. This PR furthermore modifies the ssl logs again, and adds information about this to the log-file. Furthermore we now by default remove the server certificate information from ssl.log - I doubt that this is often looked at, it is not present in TLS 1.3, we do still have the SNI, and if you need it you have the information in x509.log. This also fixes a small potential problem in X509.cc assuming there might be SAN-entries that contain null-bytes. Baseline update will follow in another commit.
This commit is contained in:
parent
5479ce607a
commit
833168090a
9 changed files with 341 additions and 4 deletions
|
@ -6,10 +6,10 @@
|
|||
module SSL;
|
||||
|
||||
export {
|
||||
## Set this to false to remove the server certificate subject and
|
||||
## Set this to true to includd the server certificate subject and
|
||||
## issuer from the SSL log file. This information is still available
|
||||
## in x509.log.
|
||||
const log_include_server_certificate_subject_issuer = T &redef;
|
||||
const log_include_server_certificate_subject_issuer = F &redef;
|
||||
|
||||
## Set this to true to include the client certificate subject
|
||||
## and issuer in the SSL logfile. This information is rarely present
|
||||
|
@ -47,6 +47,11 @@ export {
|
|||
## client.
|
||||
client_issuer: string &log &optional;
|
||||
|
||||
## Set to true if the hostname sent in the SNI matches the certificate.
|
||||
## Set to false if they do not match. Unset if the client did not send
|
||||
## an SNI.
|
||||
sni_matches_cert: bool &log &optional;
|
||||
|
||||
## Current number of certificates seen from either side. Used
|
||||
## to create file handles.
|
||||
server_depth: count &default=0;
|
||||
|
@ -108,7 +113,7 @@ event zeek_init() &priority=5
|
|||
if ( ! log_include_server_certificate_subject_issuer )
|
||||
{
|
||||
add ssl_filter$exclude["subject"];
|
||||
add ssl_filter$exclude["isser"];
|
||||
add ssl_filter$exclude["issuer"];
|
||||
}
|
||||
if ( ! log_include_client_certificate_subject_issuer )
|
||||
{
|
||||
|
@ -168,6 +173,14 @@ hook ssl_finishing(c: connection) &priority=20
|
|||
if ( c$ssl?$cert_chain && |c$ssl$cert_chain| > 0 &&
|
||||
c$ssl$cert_chain[0]?$x509 )
|
||||
{
|
||||
if ( c$ssl?$server_name )
|
||||
{
|
||||
if ( x509_check_cert_hostname(c$ssl$cert_chain[0]$x509$handle, c$ssl$server_name) != "" )
|
||||
c$ssl$sni_matches_cert = T;
|
||||
else
|
||||
c$ssl$sni_matches_cert = F;
|
||||
}
|
||||
|
||||
c$ssl$subject = c$ssl$cert_chain[0]$x509$certificate$subject;
|
||||
c$ssl$issuer = c$ssl$cert_chain[0]$x509$certificate$issuer;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue