2016-11-09 2 views
0

나는 LUNA HSM을 사용하여 디지털 서명 PDF 문서를 만들기 위해 Itext와 함께 자바를 사용한다. 내 목표는 PKCS11이있는 문서에 서명하고 HSM에서 인증서 체인을 조합하는 것입니다. 인증서를 서버에 설치하고 싶지 않습니다.LUNA HSM을 사용하여 PDF 문서에 서명하려면 어떻게합니까?

iText에서 C4_01_SignWithPKCS11HSM.java라는 샘플 프로그램을 사용하려고합니다.

내가이 걸릴 :

[루나 @ sumCentosHsm PDF] $의 javac의 -Xlint signPdf.java signPdf.java : http://developers.itextpdf.com/examples/security/digital-signatures-white-paper/digital-signatures-chapter-4

내가 컴파일 된 프로그램을, 그것은 나에게 다음과 경고를 보여줍니다 93 : 경고 : [deprecation] 의 OcspClientBouncyCastle() OcspClientBouncyCastle은 더 이상 사용되지 않습니다. OcspClient ocspClient = new OcspClientBouncyCastle();

또한 구성 파일 및 매개 변수를 작성하는 방법.

누군가에게 동일한 문제가 있는지 알고 싶습니다. 감사합니다.

답변

-1

아마도 HSM 키를 사용하여 문서에 서명하려는 특별한 상황이 있습니다. 대부분의 경우 문서 서명은 '개인 - 개체'PKI 인증서로 수행됩니다. 이 시나리오에서는 로컬 인증 기관 (Windows Server)이 SafeNet HSM에 CA의 개인 키를 저장하도록 구성되었습니다. 그런 다음 로컬 CA는 해당 도메인의 사용자에게 개인 PKI 인증서를 발급합니다 (Bob Smith). 그런 다음 사용자 Bob은 자신의 컴퓨터에 로컬 인 인증서를 사용하여 문서에 서명 할 수 있습니다. 이는 무결성과 부인 방지를 제공하며 해당 개인이 서명 한 인증서입니다. 구현에

, 단순히 대부분의 구현에 도메인의 CA의 이름이 될 것 HSM 인증서의 주체 이름을 표시하는 어떤 서명 된 문서 등

0
import java.security.*; 
import java.security.KeyStore.*; 
import java.security.cert.X509Certificate; 
import java.security.cert.Certificate; 
import com.safenetinc.luna.*; 
import java.io.*; 
import com.itextpdf.text.*; 
import com.itextpdf.text.pdf.*; 
import com.itextpdf.text.pdf.security.*; 

public class SignPdfUsingLuna{ 
    private static String keyAlias = null; 
    private static String slotPin = null; 
    private static int slotId; 
    private static String inputFile = null; 
    private static String outputFile = null; 
    private static KeyStore ks = null; 
    private static PrivateKeyEntry prKE = null; 

    private static void usage(){ 
     System.out.println("Command usage :-"); 
     System.out.println("java SignPdfUsingLuna <SlotNumber> <SlotPassword> <KeyAlias> <InputFile>"); 
    } 

    public static void main(String args[]){ 
     try{ 
      slotId = Integer.parseInt(args[0]); 
      slotPin = args[1]; 
      keyAlias = args[2]; 
      inputFile = args[3]; 
      ks = KeyStore.getInstance("Luna"); 
      ks.load(new ByteArrayInputStream(("slot:"+slotId).getBytes()),slotPin.toCharArray()); 
      ProtectionParameter param = new PasswordProtection("abcd".toCharArray()); 
      prKE = (PrivateKeyEntry)ks.getEntry(keyAlias,param); 
      X509Certificate cert = (X509Certificate)ks.getCertificate(keyAlias); 
      Certificate[] certchain = (Certificate[]) ks.getCertificateChain(keyAlias); 

      PdfReader readPdf = new PdfReader(inputFile); 
      FileOutputStream outFile = new FileOutputStream("Signed"+inputFile); 
      PdfStamper stamp = PdfStamper.createSignature(readPdf, outFile, '\0'); 
      PdfSignatureAppearance psa = stamp.getSignatureAppearance(); 
      psa.setReason("Signed by :- Sam Paul"); 
      psa.setLocation("India"); 
      Image img = Image.getInstance("Logo.jpg"); 
      psa.setImage(img); 
      psa.setVisibleSignature(new Rectangle(100, 100, 300, 200), 1, "Signature"); 
      ExternalDigest dgst = new BouncyCastleDigest(); 
      Provider prod = ks.getProvider(); 
      PrivateKey pk = prKE.getPrivateKey(); 
      ExternalSignature sign = new PrivateKeySignature(pk,DigestAlgorithms.SHA256,prod.getName()); 
      MakeSignature.signDetached(psa, dgst, sign, certchain, null, null, null, 0, MakeSignature.CryptoStandard.CMS); 
      stamp.close(); 
    }catch(ArrayIndexOutOfBoundsException aio){ 
      usage(); 
    }catch(NumberFormatException nfe){ 
      System.out.println("Please enter a valid slot number"); 
      usage(); 
    }catch(Exception e){ 
      e.printStackTrace(); 
    } 
} 

희망이 도움이됩니다.

샘.

관련 문제