Author: orw
Date: Tue Jan 21 16:32:58 2014
New Revision: 1560071
URL: http://svn.apache.org/r1560071
Log:
123744: method <SerfSession::verifySerfCertificateChain(..)> - consider
certificate's Subject Alternative Name field when searching for matching
certificate host name
Modified:
openoffice/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx
openoffice/trunk/main/ucb/source/ucp/webdav/SerfTypes.hxx
openoffice/trunk/main/ucb/source/ucp/webdav/SerfUri.hxx
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx?rev=1560071&r1=1560070&r2=1560071&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/SerfSession.cxx Tue Jan 21
16:32:58 2014
@@ -30,7 +30,7 @@
#include "ucbhelper/simplecertificatevalidationrequest.hxx"
#include "AprEnv.hxx"
-#include <apr_strings.h>
+#include <apr/apr_strings.h>
#include "DAVAuthListener.hxx"
#include "SerfTypes.hxx"
@@ -47,6 +47,10 @@
#include <com/sun/star/security/CertificateContainerStatus.hpp>
#include <com/sun/star/security/CertificateContainer.hpp>
#include <com/sun/star/security/XCertificateContainer.hpp>
+#include <com/sun/star/security/CertAltNameEntry.hpp>
+#include <com/sun/star/security/XSanExtension.hpp>
+#define OID_SUBJECT_ALTERNATIVE_NAME "2.5.29.17"
+
#include <com/sun/star/ucb/Lock.hpp>
#include <com/sun/star/xml/crypto/XSEInitializer.hpp>
@@ -479,7 +483,40 @@ apr_status_t SerfSession::verifySerfCert
// When the certificate matches the host name then we can use the
// result of the verification.
- if (isDomainMatch(sServerCertificateSubject))
+ bool bHostnameMatchesCertHostnames = false;
+ {
+ uno::Sequence< uno::Reference< security::XCertificateExtension > >
extensions = xServerCertificate->getExtensions();
+ uno::Sequence< security::CertAltNameEntry > altNames;
+ for (sal_Int32 i = 0 ; i < extensions.getLength(); ++i)
+ {
+ uno::Reference< security::XCertificateExtension >element =
extensions[i];
+
+ const rtl::OString aId ( (const sal_Char
*)element->getExtensionId().getArray(), element->getExtensionId().getLength());
+ if ( aId.equals( OID_SUBJECT_ALTERNATIVE_NAME ) )
+ {
+ uno::Reference< security::XSanExtension > sanExtension (
element, uno::UNO_QUERY );
+ altNames = sanExtension->getAlternativeNames();
+ break;
+ }
+ }
+
+ uno::Sequence< ::rtl::OUString > certHostNames(altNames.getLength() +
1);
+ certHostNames[0] = sServerCertificateSubject;
+ for( int n = 0; n < altNames.getLength(); ++n )
+ {
+ if (altNames[n].Type == security::ExtAltNameType_DNS_NAME)
+ {
+ altNames[n].Value >>= certHostNames[n+1];
+ }
+ }
+
+ for ( int i = 0; i < certHostNames.getLength() &&
!bHostnameMatchesCertHostnames; ++i )
+ {
+ bHostnameMatchesCertHostnames = isDomainMatch( certHostNames[i] );
+ }
+
+ }
+ if ( bHostnameMatchesCertHostnames )
{
if (nVerificationResult == 0)
@@ -526,8 +563,7 @@ apr_status_t SerfSession::verifySerfCert
if ( xSelection.is() )
{
- uno::Reference< task::XInteractionApprove > xApprove(
- xSelection.get(), uno::UNO_QUERY );
+ uno::Reference< task::XInteractionApprove > xApprove(
xSelection.get(), uno::UNO_QUERY );
if ( xApprove.is() )
{
xCertificateContainer->addCertificate( getHostName(),
sServerCertificateSubject, sal_True );
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/SerfTypes.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/SerfTypes.hxx?rev=1560071&r1=1560070&r2=1560071&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/SerfTypes.hxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/SerfTypes.hxx Tue Jan 21
16:32:58 2014
@@ -24,7 +24,7 @@
#ifndef INCLUDED_SERFTYPES_HXX
#define INCLUDED_SERFTYPES_HXX
-#include <serf.h>
+#include <serf/serf.h>
typedef serf_connection_t SerfConnection;
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/SerfUri.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/SerfUri.hxx?rev=1560071&r1=1560070&r2=1560071&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/SerfUri.hxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/SerfUri.hxx Tue Jan 21 16:32:58
2014
@@ -23,7 +23,7 @@
#ifndef INCLUDED_SERFURI_HXX
#define INCLUDED_SERFURI_HXX
-#include <apr_uri.h>
+#include <apr-util/apr_uri.h>
#include <rtl/ustring.hxx>
#include "DAVException.hxx"