Greetings everyone,
Im trying to implement SSL with client certificate authetication. I have already generated key and secured a test certificate from verisign. Installed the test root certificate from verisign on my test browser, Installed and bundled test certificate, intermediate certificate and root certificate from verisign to bigip. Configured the nodes, pool to port 80 and virtual server to port 443, client profile and iRule set NAT and port translate enabled. Also part of the virtual server configuration is enabling the SSL Client profile set to use the chain and trusted CA, client authentication set to required always.
When a browsing check from my client passing through bigip, at first without intermediate and server certificate, the browser would ask me to download and trust the Certificate presented by bigip, which I comply and so I am able to view the page. The problem is it seems that the client after the first session still doesn't have the matching certificate after installing the certifiacte from bigip. Checking the clients certificate store the chain is already there. So to further check the session, I used this iRule:
when CLIENTSSL_HANDSHAKE {
log local0. "Trigger 1"
set cur [SSL::sessionid]
log local0. $cur
set ask [session lookup ssl $cur]
set ssl_cert [SSL::cert 0]
set ssl_errstr [X509::verify_cert_error_string [SSL::verify_result]]
if { $ssl_cert eq "" } {
set ssl_stuff [list "No Certificate" $ssl_errstr]
} else {
set ssl_stuff [list $ssl_cert $ssl_errstr]
}
Log value of ssl_stuff
log local0. $ssl_stuff
session add ssl [SSL::sessionid] $ssl_stuff
Create a log for debug
log local0. "session add ssl [SSL::sessionid] $ssl_stuff"
}
when HTTP_REQUEST {
Add information to header request
log local0. "Trigger 2"
set ssl_stuff2 [session lookup ssl [SSL::sessionid]]
set ssl_cert2 [lindex $ssl_stuff2 0]
set ssl_errstr2 [lindex $ssl_stuff2 1]
log local0. $ssl_errstr2
if { $ssl_errstr2 eq "ok"} {
HTTP::header insert $ssl_stuff2
log local0. "[HTTP::header names]"
}
}
The logs are:
Oct 28 14:35:57 tmm tmm[1914]: Rule _header_insert : Trigger 1
Oct 28 14:35:57 tmm tmm[1914]: Rule _header_insert : 0000000000000000000000000000000000000000000000000000000000000000
Oct 28 14:35:57 tmm tmm[1914]: Rule _header_insert : {No Certificate} ok
Oct 28 14:35:57 tmm tmm[1914]: Rule _header_insert : session add ssl 0000000000000000000000000000000000000000000000000000000000000000 {No Certificate} ok
Oct 28 14:35:58 tmm tmm[1914]: Rule _header_insert : Trigger 2
Oct 28 14:35:58 tmm tmm[1914]: Rule _header_insert : ok
Oct 28 14:35:58 tmm tmm[1914]: Rule _header_insert : Accept Accept-Language Accept-Encoding User-Agent Host Connection Cache-Control No Certificate
I wan't to use CLIENTSSL_CLIENTCERT event but it seems this event is not triggered at all when I'm using SSL profile client authentication Request. Later I we would like to create another SSL profile this time client authentication required. I'm using BIG-IP 9.4.8 Build 355.0 Final. We're planning to purchase another set of bigip machines this time 8900 for SSL accelerators but we're still undecided because of this problems.
Hope somebody could help.
Thanks.