Forum Discussion
Authenticate client certificate when it is already presented to F5 via header
I'm having an ongoing problem with a single client (all other users are fine) for a site that uses the following irule to request a client certificate and insert it via header if the clients ask for a specific URI.
Code
when CLIENTSSL_CLIENTCERT {
HTTP::release
log "Cert present, Proceeding"
if { [SSL::cert count] < 1 } {
reject
log "Cert not present, rejected"
}
}
when HTTP_REQUEST {
if { [class match [HTTP::uri] contains dsg_selectivematches] } {
log "Certificate required for: [HTTP::uri]"
if { [SSL::cert count] <= 0 } {
log "Holding HTTP request until a client cert is presented..."
HTTP::collect
SSL::authenticate always
SSL::authenticate depth 15
SSL::cert mode request
SSL::renegotiate
}
else {
log "No certificate needed for: [HTTP::uri]"
}
}
}
when HTTP_REQUEST_SEND {
clientside {
if { [SSL::cert count] > 0 } {
HTTP::header insert "SSL_Client_Cert" [b64encode [SSL::cert 0]]
HTTP::header insert "SSL_Client_Cert_Chain_0" [b64encode [SSL::cert issuer 0]]
log "The Following Headers were inserted successfully: [HTTP::header names] SSL Verify Result: [X509::verify_cert_error_string [SSL::verify_result]]"
}
}
}I am no irule expert as you see the above code is "frankensteined" together but it works for all users except 1, who happens to be a major customer (of course) and it is an API based connection so makes it hard for them to change things and troubleshoot.
In my logs I see they only seem to get to the HTTP_REQUEST portion of the irule and nothing ever gets sent to the server. It appears, to me, that they are rejecting the ssl renegotiation but I wonder if the iRule isn't working because it is being presented with their client certificate right at the beginning of the session and not responding properly to being asked for a cert. Any help or guidance anyone can provide would be appreciated.
1 Reply
- Lee_Sutcliffe
Nacreous
I've just been looking at a similar issue. Nothing is sent to the server as there is a condition to check for the certificate count
if { [SSL::cert count] > 0 } {I suspect that the result of the command is returning a zero as the certificate is likely only required once. Try changing the clientssl certificate to
require the certificate, rather than once which is the default.always
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com