Stellen Sie den Authentifizierungsanbieter-SPI mithilfe von Workbench bereit und starten Sie ihn.
Einführung
Adobe® LiveCycle® Enterprise Suite 4 (ES4) unterstützt die gegenseitige Authentifizierung, um sich bei den LiveCycle-Servern anzumelden. Folgende Anwendungen werden unterstützt:
- Alle LC-Benutzeroberflächen, außer WorkBench
- Adobe Acrobat und Adobe Reader
- Microsoft Office
Bei der Authentifizierung mit CAC (Common Access Cards) können die eingebetteten Zertifikate wie Zertifikate im Microsoft® Windows® Certificate Store verwendet werden. Wenn die gegenseitige Authentifizierung erfolgt und das Zertifikat in CAC ausgewählt ist, wird der Client authentifiziert.
LiveCycle-Unterstützung für die gegenseitige Authentifizierung
Unterstützung für gegenseitige Authentifizierung in LiveCycle ist verfügbar für:
- Öffnen von richtliniengeschützten Dokumenten mit Adobe Reader oder Adobe Acrobat.
- LiveCycle Web-Benutzeroberflächen. Alle Endbenutzeroberflächen und Administrator-Benutzeroberflächen werden unterstützt.
- Authentifizierung über SharePoint-Connector. Der LiveCycle SharePoint-Connector Web kann für die Authentifizierung über ein Systembenutzerzertifikat anstelle eines vorkonfigurierten Benutzernamens und Kennworts konfiguriert werden.
- Indizierung von durch Rights Management geschützte Dokumente in LiveCycle iFilter.
- Rights Management-Erweiterungen für Microsoft® Office®.
Gegenseitige Authentifizierung wird nicht unterstützt für:
- LiveCycle Java-Client SDK
- LiveCycle Workbench
Konfiguration
Um die gegenseitige Authentifizierung zu aktivieren, führen Sie die folgenden Konfigurationen durch:
Anwendungsserverkonfiguration
Die Aktivierung der gegenseitigen Authentifizierung hängt vom verwendeten Anwendungsserver ab.
Befolgen Sie die anwendungsserverspezifischen Richtlinien, um die beidseitige gegenseitige Authentifizierung zu aktivieren.
LiveCycle Server-Konfiguration
Um die gegenseitige Authentifizierung auf dem LiveCycle-Server zu aktivieren, muss ein benutzerdefinierter UM-AuthProvider-SPI implementiert und mit einer LiveCycle-Domäne konfiguriert werden.
Weitere Informationen zum Erstellen von Authentifizierungsanbietern finden Sie unter Erstellen von Authentifizierungsanbietern.
Im Folgenden finden Sie ein Beispiel für den Authentifizierungsanbieter-SPI zum Aktivieren der gegenseitigen Authentifizierung:
package com.adobe.livecycle.usermanager.sslauthprovider; import com.adobe.idp.um.spi.authentication.*; import com.adobe.logging.AdobeLogger; import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import javax.naming.ldap.Rdn; import java.security.cert.Certificate; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import javax.security.auth.x500.X500Principal; import javax.servlet.http.HttpServletRequest; import java.security.cert.X509Certificate; import java.util.*; import org.apache.commons.codec.binary.Base64; public class SSLMutualAuthProvider implements AuthProvider{ private static AdobeLogger logger = AdobeLogger.getAdobeLogger(SSLMutualAuthProvider.class); public AuthResponse authenticate(Map credentials, List passedAuthConfigs) { ... //Extract the client certificate from the request X509Certificate[] certs = extractCertificate(request); if(certs == null || certs.length == 0){ return null; } AuthResponse ar = new AuthResponseImpl(); ar.setAuthStatus(AuthResponse.AUTH_SUCCESS); ar.setDomain(authConfigs.get(0).getDomainName()); //Assuming config is single domain and using its domainName Map<String,String> oidMap = new HashMap<String, String>(); String name = certs[0].getSubjectX500Principal().getName(); logger.info("Got Subject DN as "+name); LdapName ldapName = null; try{ ldapName = new LdapName(name); }catch(InvalidNameException e){ throw new RuntimeException(e); } //In this sample the CN of the Subject Name maps to user's loginid, however this can be changed to meet your requirements. for(Rdn rdn : ldapName.getRdns()){ String type = rdn.getType(); if("CN".equals(type)){ String cn = (String) rdn.getValue(); ar.setUsername(cn); return ar; } } return null; } private X509Certificate[] extractCertificate(HttpServletRequest request) { X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); if(certs != null){ logger.debug("No certificate found in the HTTP Header javax.servlet.request.X509Certificate"); return certs; } //Check for certificate value passed in HTTP header which is the case with proxy String certDataInPemFormat = request.getHeader("SSL_CLIENT_CERT"); if(certDataInPemFormat == null){ logger.debug("No certificate found in the HTTP Header SSL_CLIENT_CERT "); return null; } String PREFIX = "-----BEGIN CERTIFICATE----- "; String SUFFIX = " -----END CERTIFICATE-----"; int dataLength = certDataInPemFormat.length(); String encodedData = certDataInPemFormat.substring(PREFIX.length(), dataLength - SUFFIX.length() - 1); Certificate c = null; try { byte[] certData = Base64.decodeBase64(encodedData.getBytes("utf-8")); //Certificate factory would take care of removing the prefixes and suffixes CertificateFactory cf = CertificateFactory.getInstance("X.509"); c = cf.generateCertificate(new ByteArrayInputStream(certData)); } catch (CertificateException e) { throw new RuntimeException(e); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } return new X509Certificate[]{(X509Certificate) c}; } }
Dieser Authentifizierungsanbieter muss in einer Hybriddomäne in LiveCycle enthalten sein. Benutzer aus dieser Domäne wären dann für Gegenseitige Authentifizierung aktiviert.
Gehen Sie nach dem Erstellen des Authentifizierungsanbieter-SPI folgendermaßen vor, um die Bereitstellung und Konfiguration im LiveCycle-Server durchzuführen:
-
-
Gehen Sie zu Startseite > Einstellungen > Benutzerverwaltung > Domänenverwaltung.
-
Klicken Sie auf Neue Hybriddomäne.
-
Fügen Sie eine Authentifizierungsfunktion hinzu.
Wählen Sie Benutzerdefiniert aus der Liste Authentifizierungsanbieter.
-
Wählen Sie den Namen des SPI aus, der im vorgenannten Schritt 1 oben auf der Liste der benutzerdefinierten SPI gezeigt und bereitgestellt wird.
-
Klicken Sie auf Speichern.
Gehen Sie zum Konfigurieren von Rights Management wie folgt vor:
-
Gehen Sie in Admin-Benutzeroberfläche zu: Services > Rights Management > Konfiguration.
-
Überprüfen und bestätigen Sie, dass die Basis-URL mit dem Serverzertifikat übereinstimmt.
-
Aktivieren Sie die erweiterte Authentifizierung.
Hinweis:Die erweiterte Authentifizierung gilt nicht für die Rights Management-Erweiterung für Microsoft Office.
-
Klicken Sie auf Speichern.
-
Starten Sie den LiveCycle-Server neu.
Dieses Authentifizierungs-SPI kann auch zum Erstellen des Benutzers Just in time verwendet werden.
Teiländerungen am SharePoint-Connector Web
Damit ein Webpart auf einen SSL-konfigurierten LiveCycle-Server zugreifen kann, müssen die folgenden Änderungen in der Datei web.config des SharePoint-Servers vorgenommen werden:
Um die gegenseitige Authentifizierung zu aktivieren, ersetzen Sie Folgendes:
<system.serviceModel> <bindings> ... </bindings> <client> ... </client> </system.serviceModel>
Mit:
<system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="MutualSslBehavior"> <clientCredentials> <clientCertificate storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="chetanm" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> <bindings> <basicHttpBinding> <binding name="ReaderExtensionsServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> <binding name="TaskManagerServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> <binding name="TaskManagerQueryServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> <binding name="FormsServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> <binding name="DirectoryManagerServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> <binding name="MSSharePointConfigServiceSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="81920000" maxArrayLength="16384000" maxBytesPerRead="40960000" maxNameTableCharCount="16384" /> <security mode="TransportCredentialOnly"> <transport clientCredentialType="Certificate" proxyCredentialType="None" realm="" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="https://<AdobeLiveCycleServer>:<port>/soap/services/ReaderExtensionsService" binding="basicHttpBinding" bindingConfiguration="ReaderExtensionsServiceSoapBinding" behaviorConfiguration="MutualSslBehavior" contract="LiveCycleReaderExtensions.ReaderExtensionsService" name="ReaderExtensionsService" /> <endpoint address="https://<AdobeLiveCycleServer>:<port>/soap/services/FormsService" binding="basicHttpBinding" bindingConfiguration="FormsServiceSoapBinding" behaviorConfiguration="MutualSslBehavior" contract="FormsService.FormsService" name="FormsService" /> <endpoint address="https://<AdobeLiveCycleServer>:<port>/soap/services/TaskManagerService" binding="basicHttpBinding" bindingConfiguration="TaskManagerServiceSoapBinding" behaviorConfiguration="MutualSslBehavior" contract="TaskManagerService.TaskManagerService" name="TaskManagerService" /> <endpoint address="https://<AdobeLiveCycleServer>:<port>/soap/services/TaskManagerQueryService" binding="basicHttpBinding" bindingConfiguration="TaskManagerQueryServiceSoapBinding" behaviorConfiguration="MutualSslBehavior" contract="TaskManagerQueryService.TaskManagerQueryService" name="TaskManagerQueryService" /> <endpoint address="https://<alfresco-server>:<port>/soap/services/DirectoryManagerService" binding="basicHttpBinding" bindingConfiguration="DirectoryManagerServiceSoapBinding" behaviorConfiguration="MutualSslBehavior" contract="DirectoryManagerService.DirectoryManagerService" name="DirectoryManagerService" /> <endpoint address="https://<AdobeLiveCycleServer>:<port>/soap/services/MSSharePointConfigService" binding="basicHttpBinding" bindingConfiguration="MSSharePointConfigServiceSoapBinding" contract="MSSharePointConfigService.MSSharePointConfigService" behaviorConfiguration="MutualSslBehavior" name="MSSharePointConfigService" /> </client> </system.serviceModel> The certificate specification sections needs to be changed according to the certificate and its location of installation. <clientCertificate storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="<subject-name>" />
Befolgen Sie die Ressourcen und die folgenden Anweisungen, soweit sie für Ihre Umgebung erforderlich sind.
Ressource |
Anweisungen |
Geben Sie auf der Seite LiveCycle-Einstellungen im Abschnitt Sharepoint-Site-Einstellungen den <Subjektnamen> (der Name des Subjekts im Zertifikat) als Benutzername an und aktivieren Sie das Kontrollkästchen Https aktivieren. Hinweis: Webpart geht davon aus, dass es nur ein Zertifikat mit einem bestimmten Subjekt-Namen gibt. |
|
Nach der Installation des Webparts nehmen Sie die Änderungen an der web.config (wie oben beschrieben) vor. Hinweis: Wenn während der Aktivierung ein Zugriffsverweigerungsfehler auftritt, führen Sie das Powershell-Skript unter http://support.microsoft.com/de-de/kb/2564009 aus. |
|
Falls der Webpart zuvor installiert wurde, deinstallieren Sie ihn zunächst mittels des hier verfügbaren Skripts. |
PDF iFilter-Änderungen
Weitere Informationen finden Sie unter http://help.adobe.com/de_DE/livecycle/11.0/sharepoint_iFilter_RM_docs.pdf.
Die selbst signierten Zertifikate werden nicht unterstützt. Verwenden Sie Zertifikate der Zertifizierungsstelle für gegenseitige Authentifizierung.
Änderungen für den Zugriff auf HTML Workspace durch CAC-Authentifizierung
Damit sich Ihre Benutzer mit CAC-Zertifikaten (Common Access Cards) in HTML Workspace anmelden können, müssen Sie folgende Änderungen am Server vornehmen:
-
Gehen Sie zu http://[server]:[port]/lc/libs/granite/security/content/useradmin.html und melden Sie sich als Administrator an.
-
Tippen Sie auf Administrator. Die Seite „Benutzereinstellungen bearbeiten“ wird geöffnet.
-
Tippen Sie auf „trustStore erstellen“ und legen Sie ein Passwort für trustStore fest. Weitere Informationen finden Sie unter Das IdP-Zertifikat dem AEM-TrustStore hinzufügen.
-
Tippen Sie auf „keyStore erstellen“ und legen Sie ein Kennwort für den keyStore fest. Weitere Informationen finden Sie unter Dem AEM-Keystore den Schlüssel und die Zertifikatkette des Dienstanbieters hinzufügen.
-
Melden Sie sich ab und versuchen Sie, mit Port: 8443 auf den Arbeitsbereich (Workspace) zuzugreifen, und Sie sollten den Arbeitsbereich mit der CAC-Karte erreichen können.