ssl-proxies: Fix CRL refresh bug

The CertifcationRevocationList class caches CRL information to
reduce the cost of reloading them too often.

The caching logic contains a bug in which any call to the refresh
method will update the timestamp for the last reload even when
CRLs have not been reloaded. The consequence is that if refresh is
called sufficiently often, the CRLs will never be reloaded.

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
Signed-off-by: Gerd Behrmann <behrmann@gmail.com>
ssl-proxies: Performance and bug fixes in principal conversion utilities

The CertificateUtil class provides utilities for converting between
Globus DN notation and other string representations.

This patch fixes an O(n^2) problem in toGlobusId() caused by repeatedly
prepending a string to a StringBuffer, thus causing a growing string
to be copied internally.

The patch optimizes toPrincipal() by avoiding the rather expensive
LinkedList and replacing it with an ArrayDeque preallocated to the
correct size.

The patch also replaces the use of StringBuffer with the more efficient
StringBuilder class.

The patch fixes a bug in toPrincipal() in which white space around a
slash appearing inside an attribute value was stripped.

The patch adds unit tests for all three methods.

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
ssl-proxies: Fix CRL check race condition

JGlobus uses CRLs as if they were immutable objects, however when
using the Bouncy Castle provider, the ASN.1 parser uses lazy
evaluation internally, which means the X509CRL object is not
thread safe.

Signed-off-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>