曰韩免费无码AV一区二区,男女啪啪高清无遮挡免费,精品国产自在精品国产精

<delect id="ygmw2"><rp id="ygmw2"></rp></delect>
      1. <object id="ygmw2"><option id="ygmw2"></option></object>
        <object id="ygmw2"><option id="ygmw2"></option></object>

        您當前的位置:   首頁 > 新聞中心
        使用Luna HSM對PDF文檔進行數字簽名或認證
        發布時間:2020-01-12 20:28:52   閱讀次數:

        1-2001122053304B.png

        攬閣備注:此文檔是以SafeNet Luna SA為參考編寫,最新版本為SafeNet Luna Network HSM或SafeNet Luna PCIe HSM


        硬件安全模塊(HSM)和eTokens是專用,經過強化和防篡改的計算設備,旨在安全地管理,處理和存儲數字密鑰。這些設備直接連接到計算機或網絡服務器。


        Adobe Experience Manager Forms可以使用存儲在HSM或etoken上的憑據來進行eSign簽名或將服務器端數字簽名應用于文檔。要將HSM或etoken設備與AEM表單一起使用:

        1. 啟用DocAssurance服務。

        2. 為閱讀器擴展設置證書。

        3. 在AEM Web控制臺中為HSM或etoken設備創建別名。

        4. 使用DocAssurance服務API通過存儲在設備上的數字密鑰對文檔進行簽名或認證。


        在使用AEM表單配置HSM或etoken設備之前

        • 安裝AEM 6.2和安裝AEM 6.2窗體附加組件包。

        • 在與AEM 6.2服務器相同的計算機上安裝和配置HSM或etoken客戶端軟件。需要客戶端軟件才能與HSM和etoken設備進行通信。

        • (僅限Microsoft Windows)將JAVA_HOME_32環境變量設置為指向安裝32位版本的Java 8 Development Kit(JDK 8)的目錄。該目錄的默認路徑是C:\ Program Files(x86)\ Java \ jdk <version>

        • (僅OSGi上的AEM表單)將根證書安裝在信任庫中。需要驗證簽名的PDF

        注意:

        在Microsoft Windows上,僅支持32位LunaSA或EToken客戶端。


        啟用DocAssurance服務

        默認情況下,不啟用DocAssurance服務。執行以下步驟以啟用服務:

        1. 停止AEM Forms環境的Author實例。

        2. 打開[AEM_root] \ crx-quickstart \ conf \ sling.properties文件進行編輯。

          注意:

          如果使用[AEM_root] \ crx-quickstart \ bin \ start.bat文件啟動AEM實例,則打開[AEM_root] \ crx-quickstart \ sling.properties文件進行編輯。  


        3. 在sling.properties文件中添加或替換以下屬性:

        4. sling.bootdelegation.sun=sun.*,com.sun.*,sun.misc.*
          sling.bootdelegation.ibm=com.ibm.xml.*,com.ibm.*
          sling.bootdelegation.class.com.rsa.jsafe.provider.JsafeJCE=com.rsa.*
          sling.bootdelegation.class.org.bouncycastle.jce.provider.BouncyCastleProvider=org.bouncycastle.*
        5. 保存并關閉sling.properties文件。

        6. 重新啟動AEM實例。


        設置閱讀器擴展的證書

        執行以下步驟來設置證書:

        1. 以管理員身份登錄到AEM作者實例。

        2. 單擊全局導航欄上的Adobe Experience Manager。轉到工具 >  安全性 > 用戶。  

        3. 單擊用戶帳戶的名稱字段。將打開“ 編輯用戶設置”頁面。  

        4. 在AEM作者實例上,證書位于密鑰庫中。如果您之前尚未創建密鑰庫,請單擊創建密鑰庫,然后為密鑰庫設置新密碼。如果服務器已經包含密鑰庫,請跳過此步驟。

        5. 在“ 編輯用戶設置”頁面上,單擊管理密鑰庫。

        6. 在“密鑰庫管理”對話框中,展開“ 從密鑰庫文件添加私鑰”選項并提供別名。別名用于執行Reader Extensions操作。

        7. 要上載證書文件,請單擊“ 選擇密鑰存儲文件”,然后上載<filename> .pfx文件。 

        8. 將與證書關聯的密鑰存儲密碼,私鑰密碼和私鑰別名添加到各個字段。點擊提交。

        注意:

        要確定證書的私有密鑰別名,可以使用Java keytool命令:keytool -list -v -keystore [keystore-file] -storetype pkcs12


        注意:

        在“ 密鑰存儲密碼”和“ 私鑰密碼”字段中,指定證書文件隨附的密碼。  


        注意:

        對于OSGi上的AEM表單,要驗證簽名的PDF,即安裝在信任存儲中的根證書。


        注意:

        在轉到生產環境時,請用生產憑據替換評估憑據。在更新過期或評估憑證之前,請確保刪除舊的Reader Extensions憑證。


        為設備創建別名

        別名包含HSM或etoken所需的所有參數。執行以下說明,為eSign或Digital Signatures使用的每個HSM或etoken憑證創建別名:

        1. 打開AEM控制臺。AEM控制臺的默認URL為http:// <主機>:<端口> / system / console / configMgr

        2. 打開“ HSM憑據配置服務”,并為以下字段指定值:

          • 憑據別名:指定用于標識別名的字符串。此值用作某些數字簽名操作(例如“簽名簽名字段”操作)的屬性。 

          • DLL路徑:指定服務器上HSM或etoken客戶端庫的標準路徑。例如,C:\ Program Files \ LunaSA \ cryptoki.dll。在群集環境中,該路徑對于群集中的所有服務器必須相同。

          • HSM密碼:指定訪問設備密鑰所需的密碼。 

          • HSM Slot ID:指定整數類型的插槽標識符。Slot ID是逐個客戶端設置的。如果將第二臺計算機注冊到其他分區(例如,同一HSM設備上的HSMPART2),則Slot 1與客戶端的HSMPART2分區關聯。

          • 注意: 在配置Etoken時,請為HSM插槽ID字段指定一個數值。要使簽名操作正常運行,需要一個數字值。

          • 證書SHA1:為所使用的證書指定公共密鑰(.cer)文件的SHA1值(縮略圖)。確保SHA1值中沒有使用空格。如果使用的是物理證書,則不需要。

          • HSM設備類型:選擇HSM(Luna或其他)或eToken設備的制造商。  

        點擊保存。硬件安全模塊已配置用于AEM表單?,F在,您可以將硬件安全模塊與AEM表單一起使用,以對文檔進行簽名或認證。


        使用DocAssurance服務API通過存儲在設備上的數字密鑰對文檔進行簽名或認證 

        以下示例代碼使用HSM或令牌進行簽名或認證。


        /*************************************************************************
         *
         * ADOBE CONFIDENTIAL
         * ___________________
         *
         *  Copyright 2014 Adobe Systems Incorporated
         *  All Rights Reserved.
         *
         * NOTICE:  All information contained herein is, and remains
         * the property of Adobe Systems Incorporated and its suppliers,
         * if any.  The intellectual and technical concepts contained
         * herein are proprietary to Adobe Systems Incorporated and its
         * suppliers and are protected by trade secret or copyright law.
         * Dissemination of this information or reproduction of this material
         * is strictly forbidden unless prior written permission is obtained
         * from Adobe Systems Incorporated.
         **************************************************************************/
        package com.adobe.docassurance.samples;
        
        import java.io.ByteArrayInputStream;
        import java.io.IOException;
        import java.io.InputStream;
        
        import javax.jcr.Binary;
        import javax.jcr.Node;
        import javax.jcr.RepositoryException;
        import javax.jcr.Session;
        
        import org.apache.felix.scr.annotations.Component;
        import org.apache.felix.scr.annotations.Reference;
        import org.apache.felix.scr.annotations.Service;
        import org.apache.sling.api.resource.ResourceResolver;
        import org.apache.sling.jcr.api.SlingRepository;
        import org.apache.sling.jcr.resource.JcrResourceResolverFactory;
        
        import com.adobe.aemfd.docmanager.Document;
        import com.adobe.fd.docassurance.client.api.DocAssuranceException;
        import com.adobe.fd.docassurance.client.api.DocAssuranceService;
        import com.adobe.fd.docassurance.client.api.DocAssuranceServiceOperationTypes;
        import com.adobe.fd.docassurance.client.api.SignatureOptions;
        import com.adobe.fd.signatures.client.types.exceptions.InvalidArgumentException;
        import com.adobe.fd.signatures.pdf.inputs.CredentialContext;
        import com.adobe.fd.signatures.pdf.inputs.DSSPreferences;
        import com.adobe.fd.signatures.pdf.inputs.DSSPreferencesImpl;
        import com.adobe.fd.signatures.pdf.inputs.PDFSignatureAppearenceOptions;
        import com.adobe.fd.signatures.pdf.inputs.UnlockOptions;
        import com.adobe.fd.signatures.pdf.inputs.PDFSignatureAppearenceOptions.PDFSignatureAppearanceType;
        import com.adobe.fd.signatures.pdf.inputs.PDFSignatureAppearenceOptions.TextDirection;
        import com.adobe.fd.signatures.pki.client.types.common.HashAlgorithm;
        import com.adobe.fd.signatures.pki.client.types.common.RevocationCheckStyle;
        import com.adobe.fd.signatures.pki.client.types.prefs.CRLPreferences;
        import com.adobe.fd.signatures.pki.client.types.prefs.CRLPreferencesImpl;
        import com.adobe.fd.signatures.pki.client.types.prefs.GeneralPreferencesImpl;
        import com.adobe.fd.signatures.pki.client.types.prefs.PKIPreferences;
        import com.adobe.fd.signatures.pki.client.types.prefs.PKIPreferencesImpl;
        import com.adobe.fd.signatures.pki.client.types.prefs.PathValidationPreferences;
        import com.adobe.fd.signatures.pki.client.types.prefs.PathValidationPreferencesImpl;
        
        /**
         * Digital signatures can be applied to PDF documents to provide a level of security. Digital signatures, like handwritten signatures, provide a means by which signers 
         * identify themselves and make statements about a document. The technology used to digitally sign documents helps to ensure that both the signer and recipients are clear 
         * about what was signed and confident that the document was not altered since it was signed.
         * 
         * PDF documents are signed by means of public-key technology. A signer has two keys: a public key and a private key. The private key is stored in a user's credential that 
         * must be available at the time of signing. The public key is stored in the user's certificate that must be available to recipients to validate the signature. Information
         * about revoked certificates is found in certificate revocation lists (CRLs) and Online Certificate Status Protocol (OCSP) responses distributed by Certificate Authorities (CAs). 
         * The time of signing can be obtained from a trusted source known as a Timestamping Authority.
         * 
         * The following Java code example digitally signs a PDF document that is based on a PDF file. 
         * The alias that is specified for the security credential is secure, and revocation checking is performed. 
         * Because no CRL or OCSP server information is specified, the server information is obtained from the certificate used to 
         * digitally sign the PDF document
         * 
         * PreRequisites - Digital certificate for signing the document has to be uploaded on Granite Key Store
         */
        
        @Component
        @Service(value=Sign.class)
        public class Sign{
        	@Reference
        	private DocAssuranceService docAssuranceService;
        	
        	@Reference
            private SlingRepository slingRepository;
        	
        	@Reference
            private JcrResourceResolverFactory jcrResourceResolverFactory ;
        	
        	
        	/**
        	 * 
        	 * @param inputFile - path to the pdf document stored at JCR node 
        	 * @param outputFile - path to the pdf document where the output needs to be stored
        	 * @throws IOException
        	 * @throws RepositoryException
        	 * @throws InvalidArgumentException
        	 * @throws DocAssuranceException
        	 */
        	public void signExtend(String inputFile, String outputFile, String alias) throws IOException, RepositoryException, InvalidArgumentException, DocAssuranceException{
        		
        		Document inDoc = new Document(inputFile);
        		Document outDoc = null;
        		
        		Session adminSession = null;
                ResourceResolver resourceResolver = null;
                try {
                	 
                	 /** resourceResolver with admin privileges to be passed to SignatureServiceAPI and Reader Extensions
                	 the resource resolver for signature options has to be corresponding to the user who has the signing certificate in his granite key store
                	 the resource resolver for signature options has to be corresponding to the user who has the credential for reader extension in his granite key store
                	 here we are using the same resource resolver
                	 */
                	 adminSession = slingRepository.loginAdministrative(null);
                     resourceResolver = jcrResourceResolverFactory.getResourceResolver(adminSession);
                     
                     //retrieve specifications for each of the services, you may pass null if you don't want to use that service
                     //as we don't want encryption in this case, passing null for Encryption Options
                     //for encrypted document pass Unlock Options - see the method getUnlockOptions() below
        			 outDoc = docAssuranceService.secureDocument(inDoc, null, getSignatureOptions(alias,resourceResolver),null,null);
                }
        		catch(Exception e){
        			e.printStackTrace();
        		}
                finally{
                    /**
                     * always close the PDFDocument object after your processing is done.
                     */
                    if(inDoc != null){
                        inDoc.close();
                    }
                    if(adminSession != null && adminSession.isLive()){
                        if(resourceResolver != null){
                            resourceResolver.close();
                        }
                        adminSession.logout();
                    }
                }
                
                //flush the output document contents to JCR Node
        		flush(outDoc, outputFile);
        		
        		
        	}
        	
        	/**
        	 * 
        	 * @param rr resource resolver corresponding to the user with the access to signing credential for the 
        	 * given alias "allcertificatesanypolicytest11ee_new" in this case
        	 * @return SignatureOptions
        	 */
        	private SignatureOptions getSignatureOptions(String alias, ResourceResolver rr){
        		
        		//create an instance of SignatureOptions
        		SignatureOptions signatureOptions = SignatureOptions.getInstance();
        		
        		//set the operation you want to perform - SIGN/CERTIFY
        		signatureOptions.setOperationType(DocAssuranceServiceOperationTypes.SIGN);
        		
        		//field to sign
        		String fieldName = "Signature1" ;
        		
        		
                
                //Hash Algo to be used to compute digest the PDF document
                HashAlgorithm algo = HashAlgorithm.SHA384;
                
                //Reason for signing/certifying
                String reason = "Test Reason";
                
                //location of the signer
                String location = "Test Location";
                
                //contact info of the signer
                String contactInfo = "Test Contact";
                
                //Create a PDFSignatureAppearanceOptions object 
                //and show date information
                PDFSignatureAppearenceOptions appOptions = new PDFSignatureAppearenceOptions(
                        PDFSignatureAppearanceType.NAME, null, 1.0d, null, true, true,
                        true, true, true, true, true, TextDirection.AUTO);
                
                signatureOptions.setSignatureFieldName(fieldName);
                signatureOptions.setAlgo(algo);
                signatureOptions.setContactInfo(contactInfo);
                signatureOptions.setLocation(location);
                signatureOptions.setSigAppearence(appOptions);
                signatureOptions.setReason(reason);
                signatureOptions.setDssPref(getDSSPreferences(rr));
                signatureOptions.setCredential(new CredentialContext(alias, rr, true));
        		return signatureOptions;
        	}
        	
        	private DSSPreferences getDSSPreferences(ResourceResolver rr){
        		//sets the DSS Preferences
                DSSPreferencesImpl prefs = DSSPreferencesImpl.getInstance();
                prefs.setPKIPreferences(getPKIPreferences());
                GeneralPreferencesImpl gp = (GeneralPreferencesImpl) prefs.getPKIPreferences().getGeneralPreferences();
                gp.setDisableCache(true);
                return prefs;
            }
            
            private PKIPreferences getPKIPreferences(){
            	//sets the PKI Preferences
                PKIPreferences pkiPref = new PKIPreferencesImpl();
                pkiPref.setCRLPreferences(getCRLPreferences());
                pkiPref.setPathPreferences(getPathValidationPreferences());
                return pkiPref;
            }
            
            private CRLPreferences getCRLPreferences(){
                //specifies the CRL Preferences
                CRLPreferencesImpl crlPrefs = new CRLPreferencesImpl();
                crlPrefs.setRevocationCheck(RevocationCheckStyle.CheckIfAvailable);
                crlPrefs.setGoOnline(true);
                return crlPrefs;
            }
            
            private PathValidationPreferences getPathValidationPreferences(){
            	//sets the path validation preferences
                PathValidationPreferencesImpl pathPref = new PathValidationPreferencesImpl();
                pathPref.setDoValidation(false);
                return pathPref;
                
            }
            
            /**
             * sets Unlock Options for encrypted PDF
             */
            private UnlockOptions getUnlockOptions(){
                UnlockOptions unlockOptions = new UnlockOptions();
                //sets the Open Password for password encrypted PDF
                unlockOptions.setPassword("OpenPassword");
                
                //for Certificate Encrypted Document, set the alias of the credential uploaded in the user's key store
                //and corresponding resource resolver
                
                return unlockOptions;
                
            }
            /**
             * This method copies the data from {@code Document}, to the specified file at the given resourcePath.
             * @param doc
             * @param resourcePath
             * @throws IOException
             */
            private void flush(Document doc, String resourcePath) throws IOException {
         		//extracts the byte data from Document
         		byte[] output = doc.getInlineData();
         		Binary opBin;
         		Session adminSession = null;
         	    try {
         	     	 adminSession = slingRepository.loginAdministrative(null);
         	     	 
         	     	 //get access to the specific node
         	     	 //here we are assuming that node exists
         	         Node node = adminSession.getNode(resourcePath); 
         	        
         	         //convert byte[] to Binary
         	         opBin = adminSession.getValueFactory().createBinary((InputStream)new ByteArrayInputStream(output));
         			 
         	         //set the Binary data value to node's jcr:data
         	         node.getNode("jcr:content").getProperty("jcr:data").setValue(opBin);
         	    } catch (RepositoryException e) {
        
         	    }
         	    finally{
         	    	
             		if(adminSession != null && adminSession.isLive()){
             			try {
         					adminSession.save();
         					adminSession.logout();
         				} catch (RepositoryException e) {
         					
         				}
                     	
                     }
         	    }
         		
         	}
        }



        如果您是從AEM 6.0表單或AEM 6.1表單升級的,并且您使用的是先前版本的DocAssurance服務,則:

        • 要在沒有HSM或etoken設備的情況下使用DocAssurance服務,請繼續使用現有代碼。

        • 要將DocAssurance服務與HSM或etoken設備一起使用,請使用下面列出的API替換現有的CredentialContext對象代碼。


        /**
        	 * 
        	 * @param credentialAlias alias of the PKI Credential stored in CQ Key Store or 
        	 * 		  the alias of the HSM Credential configured using HSM Credentials Configuration Service.			  	
        	 * @param resourceResolver corresponding to the user with the access to the key store and trust store.
        	 * @param isHSMCredential if the alias is corresponding to HSM Credential. 
        	 */
        	public CredentialContext(String credentialAlias, ResourceResolver resourceResolver, boolean isHSMCredential);


        攬閣信息可提供的部分安全產品和解決方案信息

        聯系攬閣信息,您可以獲取到更多滿足全球合規性要求的信息安全產品資料,以及相關的整體解決方案的相關資料。如:


        您還可以得到攬閣信息所提供的優質服務。

        攬閣信息 · 值得您信賴的信息安全顧問!


        相關閱讀

        購買咨詢電話
        021-54410609
        曰韩免费无码AV一区二区,男女啪啪高清无遮挡免费,精品国产自在精品国产精