-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


Java c PDF

, 11 2017 . 17:00 +
vburmistrov 17:00

Java c PDF



    ! - .

    :

    • PDF ;
    • Java, itextpdf CSP, ;
    • , , itextpdf;
    • , ;
    • PDF .

    ( , ) . , .

    , , , .

    PDF


    PDF . . PDF , , , . PDF- JavaScript - .

    Adobe Systems ( PDF) . PKCS#7 CAdES, PDF . , .

    .. Adobe .

    PDF , , , , , , , , .

    , , Acrobat Adobe Reader : , , , , , , , .


    Java: 1.8.0_111 HotSpot(TM) 64-Bit Server VM (build 25.111-b14).

    CSP v4.0 JCP v.2.0, Java CSP v.4.0

    JCP v.2.0, Java CSP v.4.0?

    , JCP 31.12.2018, , , . Java CSP v.4.0 API CSP, . , .

    Java Cryptography Architecture (JCA), : JCSP. , ../java/jdk1.8.x_xxx/jre/lib/security/java.security, , , :
    #
    # List of providers and their preference orders (see above):
    #
    security.provider.1=ru.CryptoPro.JCSP.JCSP


    , Java, .

    ../java/jdk1.8.x_xxx/jre/lib/security local_policy.jar US_export_policy.jar : Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
    default_local.policy default_US_export.policy:

    grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission;
    };


    iText itextpdf.com PDF Java .

    JCP Git patch iTextpdf 5.1.3
    jcp-2.0.xxxxx\Doc\itextpdf\ itextpdf_5.1.3.gost.user.patch



    itextpdf . 5.1.3, Bash Git : git apply --stat itextpdf_5.1.3.gost.user.patch



    .

    JCP samples-sources.jar. , PDF-. (\PDF\SignVerifyPDFExample.java).


    itextpdf ru.CryptoPro.JCP ru.CryptoPro.reprov.x509.

    itextpdf_5.1.3.gost .

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project itextpdf: Compilation failure: Compilation failure:
    [ERROR] \github\iTextpdf_5.1.3_patched_cryptopro_bc1.50\src\main\java\com\itextpdf\text\pdf\PdfPKCS7.java:[138,23] error: package ru.CryptoPro.JCP does not exist
    [ERROR] \github\iTextpdf_5.1.3_patched_cryptopro_bc1.50\src\main\java\com\itextpdf\text\pdf\PdfPKCS7.java:[139,31] error: package ru.CryptoPro.reprov.x509 does not exist

    2.0 JCP.jar JCPRevTools.jar JRE, Maven: Java\jdk1.8.0_111\jre\lib\ext. , classPath .

    , , . . iTextpdf_5.1.3 Bouncy Castle 1.46 , ASN.1 .

                    
    			org.bouncycastle
    			bctsp-jdk15
    			1.46
    			jar
    			compile
    			true
    		
    

    JCP 2.0 Bouncy Castle 1.50 bcpkix-jdk15on-1.50 bcprov-jdk15on-1.5, , jre/lib/ext .

    PDF :

    Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/DEREncodable
    at com.itextpdf.text.pdf.PdfSigGenericPKCS.setSignInfo(PdfSigGenericPKCS.java:97)
    at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1003)
    at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:904)
    at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:194)
    at ru.alfabank.ccjava.trustcore.logic.SignatureProcessor.pdfSignature(SignatureProcessor.java:965)
    at ru.alfabank.ccjava.trustcore.logic.SignatureProcessor.main(SignatureProcessor.java:1363)
    Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more

    Java main , , , . NoClassDefFoundError , Java , .

    iTextpdf_5.1.3 Bouncy Castle, iTextpdf .

    JCP 2.0 Bouncy Castle CAdES.jar. JRE CAdES JCP 2.0, .

    CAdES ?

    , :

    • iTextpdf_5.1.3_patched_cryptopro org.bouncycastle 1.46 1.50.

      	               
      				org.bouncycastle
      				bcprov-ext-jdk15on
      				1.50
      			
      			
      				org.bouncycastle
      				bcprov-jdk15on
      				1.50
      			
      			
      				org.bouncycastle
      				bcmail-jdk15on
      				1.50
      			
      	
    • iTextpdf_5.1.3_patched_cryptopro, Bouncy Castle Porting from earlier BC releases to 1.47 and later
    • iTextpdf_5.1.3_patched_cryptopro, Bouncy Castle, , itextpdf 5.5.5, Bouncy Castle 1.50, .

    , iTextpdf_5.1.3_patched_cryptopro_bc1.50 . , itextpdf org.bouncycastle 1.50.

    iTextpdf_5.1.3_patched_cryptopro_bc1.50 GitHub: iTextpdf_5.1.3_patched_cryptopro_bc1.50

    , PDF


    iTextpdf_5.1.3_patched_cryptopro_bc1.50 :

     /**
         * 
         * @param aliases
         *            -     
         * @param data
         *            -     PDF
         * @param pdfVersion
         *            -    PDF
         * @return
         * @throws SignatureProcessorException
         */
        public static byte[] samplePDFSignature(String[] aliases, byte[] data, char pdfVersion) throws SignatureProcessorException {
            ByteArrayOutputStream bais = new ByteArrayOutputStream();
            HashMap currSignAttrMap = new HashMap();
            for (String alias : aliases) {
                X509Certificate certificate = (X509Certificate) signAttributesMap1.get(alias)[0];
                PrivateKey privateKey = (PrivateKey) signAttributesMap1.get(alias)[1];
                
                currSignAttrMap.put(certificate, privateKey);
                if (certificate == null) {
                    throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + CERTIFICATE_NOT_FOUND_BY_ALIAS);
                }
                
                if (privateKey == null) {
                    throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + PRIVATE_KEY_NOT_FOUND_BY_ALIAS);
                }
            }
            try {
                FileInputStream fis = new FileInputStream(new File(FILE_PATH));
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                int n = 0;
                while ((n = fis.read(buf, 0, buf.length)) != -1) {
                    baos.write(buf, 0, n);
                }
                fis.close();
                byte[] im = baos.toByteArray();
                
                X509Certificate innerCA = obtainCertFromTrustStoreJKS(false, INNER_CA);
                PdfStamper stp = null;
                PdfReader reader = null;
                int pageNumber = 1;
                for (Entry entry : currSignAttrMap.entrySet()) {
                    if (bais.toByteArray().length == 0) {
                        reader = new PdfReader(data);
                    } else {
                        reader = new PdfReader(bais.toByteArray());
                        bais = new ByteArrayOutputStream();
                    }
                    stp = PdfStamper.createSignature(reader, bais, pdfVersion); //'\0'
                    Certificate[] certPath = new Certificate[] {entry.getKey(), innerCA};
                    PdfSignatureAppearance sap = stp.getSignatureAppearance();
                    sap.setProvider("JCSP"); //JCP
                    sap.setCrypto(entry.getValue(), certPath, null,
                            PdfSignatureAppearance.CRYPTOPRO_SIGNED);
                    Image image = Image.getInstance(im);
                    sap.setImage(image);
                    sap.setVisibleSignature(new Rectangle(150, 150), pageNumber, null);
                    pageNumber++;
                    stp.close();
                    bais.close();
                    reader.close();
                }
            } catch (RuntimeException e) {
                throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + ExceptionUtils.getFullStackTrace(e));
            } catch (IOException e) {
                throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + ExceptionUtils.getFullStackTrace(e));
            } catch (DocumentException e) {
                throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + ExceptionUtils.getFullStackTrace(e));
            } catch (CertificateEncodingException e) {
                throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + ExceptionUtils.getFullStackTrace(e));
            } catch (Exception e) {
                throw new SignatureProcessorException(PDF_SIGNATURE_ERROR + ExceptionUtils.getFullStackTrace(e));
            }
            return bais.toByteArray();
        }
    

    , PDF- PDF. , . .

    , setCrypto com.itextpdf.text.pdf.PdfSignatureAppearance.

    PDF- , .

    .





    :





    PDF-


    , PDF . . , , , .

    , . , . , PDF .

    PKCS#7 (CAdES). .

    PDF CAdES , PDF .

    , Java. PDF Java. itextpdf .

    , , , , -. PDF- .


    1. Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8
    2. iTextpdf
    3. Bouncy Castle [Porting from earlier BC releases to 1.47 and later
    4. iTextpdf_5.1.3_patched_cryptopro_bc1.50 GitHub
    Original source: habrahabr.ru (comments, light).

    https://habrahabr.ru/post/337668/


    : [1] []
     

    :
    : 

    : ( )

    :

      URL