waysun一路陽光

          不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks

          cfca采用加密組件Bouncy Castle。 
          cfca證書工具包包含如下文件(服務器端,以jdk1.4為例): 
          1、bcprov-jdk14-125.jar:security provider lib 
          2、bcmail-jdk14-125.jar:貌似郵件用的 
          3、cfcaDigitalKitTest.jar:cfca自己開發的工具包,就一個類 
          4、entbase.jar、entuser.jar:cfcaDigitalKitTest.jar要應用的2個jar包 
          5、cacerts:cfca的根證書鏈文件,是一個keystore文件,可以用keytool -list查看 
          6、castle.ini:cfca工具包的配置文件,內容如下 

          [CRL校驗部分]==========貌似可以不配 
          /*ldap服務器端口號*/ 
          ldapServerPort=389 
          /*ldap服務器地址*/ 
          ldapServerName=210.74.41.60 
          /*CFCA CRL cache存放目錄*/ 
          cachedCRLDirPath=G:\\testCerts 

          [用戶證書部分] 
          /*用戶證書路徑*/==========這里可以配置keystore(擴展名必須是keysotre,寫死在cfca工具包中)或者pfx文件 
          userCertFilePath=D:\\java\\stf\\cfca\\cfcakeystore_server.keystore 
          /*訪問用戶證書口令*/ 
          userCertPassword=Passw0rds 
          /*用戶證書別名,可選*/===========如果前面配的是keystore必須指定alias 
          userCertAlias=cfca_server 

          [可信CA庫口令]=============根證書鏈文件cacerts的默認文件 
          trustedCAStorePass=changeit 





          兩種方式使用cfca的證書工具包: 
          參考:http://danielzzu.blog.163.com/blog/static/11851530420101194345324/ 

          一、配置方式(以jdk1.4為例) 
          1. 添加安全庫 
          前置條件:獲得/usr/java14目錄的寫權限 
          動作: 
          要添加兩個安全jar文件:bcmail-jdk14-125.jar和bcprov-jdk14-125.jar 
          把這兩個jar放到/usr/java14/jre/lib/ext目錄下 
          修改這兩個jar包的權限: 
          chmod 755 bcmail-jdk14-125.jar 
          chmod 755 bcprov-jdk14-125.jar 

          2. 配置安全文件java.security 
          該文件在/usr/java14/jre/lib/security/ 目錄下 
          在其中添加一行: 
          security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider 
          其中N用具體的數字替換,如果文件中原有的security provider編號最大是4,則這里的N就用5,注意千萬不要與原有的security provider編號重復! 

          3. 更新cacerts文件 
          該文件在/usr/java14/jre/lib/security/ 目錄下 
          首先對該目錄下原cacerts進行備份:mv cacerts cacerts.old 
          然后把提供的cacerts復制到這個目錄下 
          修改文件權限:chmod 755 cacerts 

          4. 將cfcaDigitalKitTest.jar、entbase.jar、entuser.jar、castle.ini放到classpath中,就可以調用cfca工具包: 
          Java代碼  收藏代碼
          1. import java.io.File;  
          2. import java.io.FileInputStream;  
          3. import java.security.KeyStore;  
          4. import java.security.PrivateKey;  
          5. import java.security.Security;  
          6. import java.security.cert.X509Certificate;  
          7. import java.util.Enumeration;  
          8. import com.cfca.toolkit.*;  
          9.   
          10. public class TestSign {  
          11.   
          12.     /** 
          13.      * @param args 
          14.      */  
          15.     public static void main(String[] args) {  
          16.         // TODO Auto-generated method stub  
          17.         try{  
          18.             TestSign ts=new TestSign();;  
          19.             String msg="test string !!!!!!";  
          20.             System.out.println("簽名前數據:"+msg);  
          21.             String signedMsg=ts.signData(msg);  
          22.             System.out.println("簽名后數據:"+signedMsg);           
          23.             String checkedMsg=ts.checkSign(signedMsg);  
          24.             System.out.println("驗證簽名后數據:"+checkedMsg);  
          25.         }catch(Exception e){  
          26.             e.printStackTrace();  
          27.         }  
          28.   
          29.     }  
          30.           
          31.     public String signData(String msg) throws Exception{  
          32.         Castle.iniFilePath = "D:\\java\\stf\\castle_client.ini";  
          33.         Castle castle=new Castle();  
          34.         castle.initCertAppContext();  
          35.         return castle.signData(msg);  
          36.     }  
          37.       
          38.     public String checkSign(String msg) throws Exception{  
          39.         Castle.iniFilePath = "D:\\java\\stf\\castle.ini";  
          40.         Castle castle=new Castle();  
          41. //      castle.initCertAppContext();  
          42.         System.out.println("簽名者DN:"+castle.getDN(castle.getCertificate(msg)));  
          43.         return castle.verifySignedData(msg);  
          44.     }  
          45.       
          46. }  



          二、編碼方式 
          配置方式稍顯麻煩,編碼方式無非在程序中指定provider 

          悲劇:cfca證書工具包中指定trustkeystore只能是上述配置的位于jdk目錄的cacerts,不能放在其他地方 


          Java代碼  收藏代碼
          1.     //指定truststore(但經過測試,僅用客戶端證書簽名,用服務器端證書驗證簽名不需要配置truststore)  
          2.  //驗證簽名不需要配置trustCA,但調用cfca工具包的驗證證書命令:verifyCertificate,就需要配置信任CA  
          3. //      System.setProperty("javax.net.ssl.trustStore","D:\\java\\stf\\cacerts");     
          4. //      System.setProperty("javax.net.ssl.trustStorePassword","changeit");    
          5.     //指定provider  
          6.         Security.addProvider(new BouncyCastleProvider());  


          Java代碼  收藏代碼
          1. import java.io.File;  
          2. import java.io.FileInputStream;  
          3. import java.security.KeyStore;  
          4. import java.security.PrivateKey;  
          5. import java.security.Security;  
          6. import java.security.cert.X509Certificate;  
          7. import java.util.Enumeration;  
          8. import com.cfca.toolkit.*;  
          9.   
          10. import org.bouncycastle.jce.provider.BouncyCastleProvider;  
          11.   
          12. public class TestSign {  
          13.   
          14.     /** 
          15.      * @param args 
          16.      */  
          17.     public static void main(String[] args) {  
          18.         // TODO Auto-generated method stub  
          19.         try{  
          20.             TestSign ts=new TestSign();  
          21.             String msg="test string!!!!!!!!!";  
          22.             System.out.println("簽名前數據:"+msg);  
          23.             String signedMsg=ts.signData(msg);  
          24.             System.out.println("簽名后數據:"+signedMsg);           
          25.             String checkedMsg=ts.checkSign(signedMsg);  
          26.             System.out.println("驗證簽名后數據:"+checkedMsg);  
          27.         }catch(Exception e){  
          28.             e.printStackTrace();  
          29.         }  
          30.   
          31.     }  
          32.       
          33.     public TestSign(){  
          34.     //指定truststore(但經過測試,僅用客戶端證書簽名,用服務器端證書驗證簽名不需要配置truststore)  
          35.  //驗證簽名不需要配置trustCA,但調用cfca工具包的驗證證書命令:verifyCertificate,就需要配置信任CA  
          36. //      System.setProperty("javax.net.ssl.trustStore","D:\\java\\stf\\cacerts");     
          37. //      System.setProperty("javax.net.ssl.trustStorePassword","changeit");    
          38.     //指定provider  
          39.         Security.addProvider(new BouncyCastleProvider());  
          40.           
          41.     }  
          42.       
          43.     public String signData(String msg) throws Exception{  
          44.         Castle.iniFilePath = "D:\\java\\stf\\castle.ini";  
          45.         Castle castle=new Castle();  
          46.         castle.initCertAppContext();  
          47.         return castle.signData(msg);  
          48.     }  
          49.       
          50.     public String checkSign(String msg) throws Exception{  
          51.         Castle.iniFilePath = "D:\\java\\stf\\castle_client.ini";  
          52.         Castle castle=new Castle();  
          53. //      castle.initCertAppContext();  
          54.         System.out.println("簽名者DN:"+castle.getDN(castle.getCertificate(msg)));  
          55.         return castle.verifySignedData(msg);  
          56.     }  
          57.   
          58. }  


          posted on 2011-11-08 18:31 weesun一米陽光 閱讀(3918) 評論(1)  編輯  收藏

          評論

          # re: cfca證書工具包使用指南【轉】 2016-05-06 02:15
          阿斯頓撒旦  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 阿合奇县| 斗六市| 会泽县| 建湖县| 霍邱县| 民勤县| 特克斯县| 铁岭市| 鄂尔多斯市| 丹凤县| 孟州市| 石渠县| 肥东县| 肃南| 资中县| 遂昌县| 曲麻莱县| 扶沟县| 安宁市| 海宁市| 博爱县| 东宁县| 广昌县| 荥阳市| 汽车| 琼海市| 兴仁县| 静乐县| 香河县| 定边县| 平安县| 玉田县| 镇康县| 噶尔县| 石林| 轮台县| 佛坪县| 毕节市| 井冈山市| 阿尔山市| 紫阳县|