2016-11-09 24 views
0

私はItextでjavaを使用して、LUNA HSMを使用してデジタル署名PDF文書を作成します。 私の目的は、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

警告:[廃止予定] OcspClientBouncyCastle()内の OcspClientBouncyCastleは非推奨になりました。 OcspClient ocspClient = new OcspClientBouncyCastle();

また、設定ファイルとパラメータをビルドする方法。

誰かが同じ問題を抱えているかどうかを知りたいです。 ありがとうございます。

答えて

-1

おそらく、文書に署名するためにHSMキーを使用する特別な状況があります。ほとんどの場合、文書署名は「個人エンティティ」PKI証明書で行われます。このシナリオでは、ローカル認証局(Windows Server)がSafeNet HSMにCAの秘密鍵を格納するように設定されています。次に、ローカルCAはそのドメインのユーザーに個人用のPKI証明書を発行します(Bob Smith)。その後、ユーザーBobは、自分のマシンのローカル証明書を使用して文書に署名することができます。これは完全性と否認防止を提供し、証明書はその個人によって署名されます。あなたの実装で

、任意の署名された文書は、単に

0
など、ほとんどの実装では、ドメインのCA名であると思われる、HSM証明書のサブジェクト名を表示していました
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(); 
    } 
} 

・ホープ、このことができます。

サム。

関連する問題