ワークベンチを使用して Auth Provider SPI DSC を展開し、開始します。
Adobe® LiveCycle® Enterprise Suite 4 (ES4) は LiveCycle サーバーにログインできるようにするために相互認証をサポートします。以下がサポートされています。
CAC(Common Access Cards)を使用する認証の場合は、埋め込まれた証明書を Microsoft® Windows® Certificate ストアの証明書と同様に使用できます。相互認証が実行され、CAC の証明書が選択されると、クライアントは認証されます。
LiveCycle の相互認証サポートは次の用途で使用できます:
相互認証は次の場合サポートされていません:
使用されるアプリケーションに応じて相互認証を有効にします。
2 ウェイ相互認証を有効にするには、アプリケーションサーバー固有のガイドラインに従ってください。
LiveCycle サーバーの相互認証を有効にするには、カスタムの UM AuthProvider SPI を LiveCycle ドメインに実装し、構成しておく必要があります。
認証プロバイダーの作成の詳細については、認証プロバイダーの作成.を参照してください。
次は、相互認証を有効化するための認証プロバイダーのサンプルです:
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}; } }
この認証プロバイダーは LiveCycle のハイブリッドドメインに含める必要があります。その後、そのドメインからのユーザーに対する相互認証が有効になります。
Auth Provider SPI DSC の構築後、下記の手順に従って、LiveCycle サーバーに展開し、構成します。
ワークベンチを使用して Auth Provider SPI DSC を展開し、開始します。
「Home (ホーム)」/「Settings (設定)」/「User Management (ユーザー管理)」/「Domain Management (ドメイン管理)」の順にクリックします。
New Hybrid Domain (新しいハイブリッドドメイン)をクリックします。
認証を追加します。
認証プロバイダーリストから「Custom (カスタム)」を選択します。
表示されているカスタム SPI のリストから、上記の手順 1 で展開した SPI の名前を選択します。
「保存」をクリックします。
著作権管理を構成するには、下記の手順に従ってください:
管理者 UI では、次の順にアクセスします:「Services (サービス)」/「著作権管理」/「Configuration (構成)」。
ベース URL がサーバー認証に一致することを確認します。
「Extended Authentication (拡張された認証)」を有効化します。
拡張認証は、Rights Management Extension for Microsoft Office には適用されません。
「保存」をクリックします。
LiveCycle サーバーを再始動します。
この認証 SPI はユーザー「Just in time」の作成にも使用できます。
SSL 構成済みの LiveCycle サーバーにアクセスするための Web パーツについては、SharePoint サーバーの web.config ファイルに次の変更を行う必要があります。
相互認証を有効にするには、次の項目を置き換えてください:
<system.serviceModel> <bindings> ... </bindings> <client> ... </client> </system.serviceModel>
変更内容:
<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>" />
お使いの環境に必要に応じて次のリソースおよび手順に従います。
リソース |
Instructions |
LiveCycle 設定ページの sharepoint-site-Settings セクションでは、<subject-name> (証明書のサブジェクト名) に「ユーザー名」を指定し、「Enable Https (Https を有効化)」チェックボックスをオンにします。 注:Webpart では特定のサブジェクト名を持つ証明書が 1 つだけであると想定します。 |
|
Web パーツのインストール後、web.config を変更します (上述の説明の通り)。 注アクティブ化処理中に Access denied error が発生したときは、http://support.microsoft.com/ja-jp/kb/2564009で入手できる powershell スクリプトを実行してください。 |
|
Web パーツが既にインストールされている場合は、まずここにあるスクリプトを使用してそれをアンインストールします。 |
詳細については、http://help.adobe.com/ja_JP/livecycle/11.0/sharepoint_iFilter_RM_docs.pdf を参照してください。
自己署名証明書はサポートされていません。相互認証には CA 発行の証明書を使用します。
共通アクセスカード(CAC)証明書を使用して HTML Workspace にログインできるようにするには、サーバーで次の変更を行う必要があります。
http://[server]:[port]/lc/libs/granite/security/content/useradmin.html に行き、管理者としてログインします。
「Administrator」をタップします。「ユーザ設定の編集」ページが開きます。
「Create trustStore」をタップし、trustStore のアクセスパスワードを設定します。詳細については、AEM 信頼ストアに IDP 証明書の追加を参照してください。
「Create keyStore」をタップし、keyStore のパスワードを設定します。詳細については、AEM キーストアにサービスプロバイダーのキーおよび証明書チェーンの追加を参照してください。
ログアウトして、port :8443 を使用してワークスペースにアクセスすると CAC カードを備えたワークスペースに接続できるようになります。
アカウントにログイン