導航:首頁 > 編程語言 > java簽名證書

java簽名證書

發布時間:2023-06-02 05:54:21

java2下Applet數字簽名實現方法

Java2下Applet數字簽名具體實現方法我的項目是使用APPLET製作一個實時消息隊列監控程序,由於涉及到了本地資源,對APPLET一定要進行數字簽名和認證。我使用的環境是WINDOWS2000,應用伺服器是WEBLOGIC6.0,開發環境是JBUILDER4.0。之前我提醒大家一定要注意伺服器端和客戶端的概念。那些文件應該在伺服器端,那些文件應該在客戶端。

首先在客戶端使用JRE1.3.0_01(JAVA運行環境1.3.0.1版本)以取代IE的JVM(JAVA虛擬機),可以到www.JAVA.SUN.COM網站上去下載,下載好了先在客戶端安裝好,安裝過程非常簡單。

在伺服器端的調用APPLET的HTML文件中也需要將它包含進來,以便沒有事先安裝JRE的客戶端下載,具體的寫法,請接著往下看;

具體步驟如下:

伺服器端:

1.將程序需要用到的各種包文件全部解壓(我這兒要用到WEBLOGIC的JMS包使用命令jar xf weblogicc.jar),然後使用JDK的打包命令將編譯好的監控程序.class和剛才解壓的包一起打包到一個包中。(前提我已經將監控程序和解開的包都放在同一個目錄下了),都是dos狀態下的命令,具體命令見jdk1.3(1.2)的bin目錄下,

命令如下:

jar cvf monitor.jar *.class

此命令生成一個名為monitor.jar的包

2.為剛才創建的包文件(monitor.jar)創建keystore和keys。其中,keystore將用來存放密匙(private keys)和公共鑰匙的認證,alias別名這兒取為monitor。

命令如下:

keytool -genkey -keystore monitor.keystore –alias monitor

此命令生成了一個名為monitor.keystore的keystore文件,接著這條命令,系統會問你好多問題,比如你的公司名稱,你的地址,你要設定的密碼等等,都由自己的隨便寫。

3.使用剛才生成的鑰匙來對jar文件進行簽名

命令如下:

jarsigner -keystore monitor.keystore monitor.jar monitor

這個命令將對monitor.jar文件進行簽名,不會生成新文件。

4.將公共鑰匙導入到一個cer文件中,這個cer文件就是要拷貝到客戶端的唯一文件 。

命令如下:

keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer

此條命令將生成monitor.cer認證文件,當然這幾步都有可能問你剛才設置的密碼。這樣就完成了伺服器端的設置。這時你就可以將jar文件和keystore文件以及cer文件(我這兒是monitor.jar,monitor.keystore,monitor.cer)拷貝到伺服器的目錄下了,我用的是weblogic6.0,所以就拷貝到C:\bea\wlserver6.0\config\mydomain\applications\DefaultWebApp_myserver下的自己建的一個目錄下了。

客戶端:

1. 首先應該安裝jre1.3.0_01,然後將伺服器端生成的monitor.cer 文件拷貝到jre的特定目錄下,我這兒是:
c:\program files\javasoft\jre\1.3.0_01\lib\security目錄下。

2. 將公共鑰匙倒入到jre的cacerts(這是jre的默認keystore)

命令如下:

keytool -import -alias monitor -file monitor.cer
-keystore cacerts

注意這兒要你輸入的是cacerts的密碼,應該是changeit,而不是你自己設定的keystore的密碼。

3. 修改policy策略文件,在dos狀態下使用命令 policytool

系統會自動彈出一個policytool的對話框,如圖4所示,在這裡面首先選擇file菜單的open項,打開c:\program files\javasoft\jre\1.3.0_01\lib\security目錄下的java.poliy文件,然後在edit菜單中選擇Change keystore ,在對話框中new keystore url:中輸入
file:/c:/program files /javasoft/jre/1.3.0_01/lib/security/cacerts, 這兒要注意反斜杠,在new keystore type 中輸入JKS,這是cacerts的固定格式,然後單擊Add Policy Entry,在出現的對話框中CodeBase中輸入:

http://URL:7001/*

其中的URL是伺服器的IP地址,7001是我的weblogic的埠,如果你是在別的應用伺服器上比如說是apache,那埠號就可以省略掉。

在SignedBy中輸入(別名alias):這兒是Monitor然後單擊add peimission按鈕,在出現的對話框中permission中選擇你想給這個applet的許可權,這兒具體有許多許可權,讀者可以自己找資料看看。我這兒就選用allpeimission,右邊的signedBy中輸入別名:monitor
最後保存,在file菜單的save項。

當然你可以看見我已經對多個包實現了簽名認證。

這樣客戶端的設置就完成了。在客戶端用ie運行該applet程序時,會詢問你是不是對該簽名授權,選擇授權後,包會自動從伺服器下載到本地計算機,而且ie會自動啟動jre,在右下欄中可以看見,相當於ie的java控制台。

4.調用applet的html文件

大家都知道由於java2的安全性,對applet的正常調用的html文件已經不能再使用了,而改為ActiveX類型的調用。具體的又分ie和nescape的不同寫法,這一些在sun網上都能找到現成的教程。我就不多說了,只是將我的這個小程序為ie寫的的html給大家看看。

<html>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=gb2312">
<center>
<h3>消息中心實時監控平台</h3>
<hr>
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width="900" height="520" align="baseline" codebase="http://192.168.2.217:7001/j2re-1_3_0_01-win-i.exe#Version=1,3,0,0">
<PARAM NAME="java_code" VALUE="wise.monitor.applet.monitorApplet">
<PARAM NAME="java_codebase" VALUE="monitor/classes">
<PARAM NAME="java_type" VALUE="application/x-java-applet;version=1.3">
<PARAM NAME="ARCHIVE" VALUE="monitor.jar" >
<PARAM NAME="scriptable" VALUE="true">
</OBJECT>
</center>
</html>

其中我要強調一點,因為applet每一次的改動都需要重新打包簽名,手續非常繁瑣,所以在具體的實現中要將一些會變化參數放到html文件中來,傳到applet中去,這一點網上文章好多,自己去看吧。

另外一個就是有朋友問我,那這樣不是太麻煩了,每一個客戶端都要進行復雜的dos命令操作,我只能說一目前我的水平只能將一個已經做好的客戶端文件cer文件和java.policy以及cacerts文件直接拷貝到客戶端,當然這也有缺陷,如果別人的計算機已經有了認證,就會丟失。就這些問題我們可以一起探討。

另外還有一點優化,就是在打包的時候,我這兒只講了把所有要用的涉及到安全性的包和源程序到要打到一個包中。這樣如果包非常大的話,會非常影響下載的速度,如果可以使用本地計算機的包就好了,這一點jre也做到了,具體的要到控制面板的jre控制台上去設置。這個就留著讀者自己去摸索吧。

結束語

我發現網上java相關的資料非常少,中文的更少,所以希望自己能將一些小知識和大家共享,省掉許多重復的無用功。如果大家對這個問題還有不清楚的地方,或者就這問題相進一步展開討論的,請和我聯系,我的信箱是[email protected]。希望我們能共同進步!

http://java.chinaitlab.com/advance/520330.html

⑵ java 數字簽名自驗證該如何實現

沒有看到所謂的簽名自驗證的說法。 我想你指的應該是數字簽名自帶證書,然後用證書來驗證簽名吧。

其實這是一種簽名的格式。被稱為P7。 就是在信息中包含長度,演算法,明文,簽名串和證書公鑰。 收到以後,可以自動用證書來驗證。 這些演算法很多。你可以去找,很容易查到。
這種簽名的關鍵是證書也需要被驗證。這種做法一般是雙方擁有發證CA的公鑰,來驗證證書的合法性。這也有很多的。

⑶ java 怎麼驗證文件為數字簽名認證文件

1)從密鑰庫中讀取CA的證書
FileInputStream in=new FileInputStream(".keystore");
KeyStore ks=KeyStore.getInstance("JKS");
ks.load(in,storepass.toCharArray());
java.security.cert.Certificate c1=ks.getCertificate("caroot");
(2)從密鑰庫中讀取CA的私鑰
PrivateKey caprk=(PrivateKey)ks.getKey(alias,cakeypass.toCharArray());
(3)從CA的證書中提取簽發者的信息
byte[] encod1=c1.getEncoded(); 提取CA證書的編碼
X509CertImpl cimp1=new X509CertImpl(encod1); 用該編碼創建X509CertImpl類型對象
X509CertInfo cinfo1=(X509CertInfo)cimp1.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 獲取X509CertInfo對象
X500Name issuer=(X500Name)cinfo1.get(X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME); 獲取X509Name類型的簽發者信息
(4)獲取待簽發的證書
CertificateFactory cf=CertificateFactory.getInstance("X.509");
FileInputStream in2=new FileInputStream("user.csr");
java.security.cert.Certificate c2=cf.generateCertificate(in);
(5)從待簽發的證書中提取證書信息
byte [] encod2=c2.getEncoded();
X509CertImpl cimp2=new X509CertImpl(encod2); 用該編碼創建X509CertImpl類型對象
X509CertInfo cinfo2=(X509CertInfo)cimp2.get(X509CertImpl.NAME+"."+X509CertImpl.INFO); 獲取X509CertInfo對象
(6)設置新證書有效期
Date begindate=new Date(); 獲取當前時間
Date enddate=new Date(begindate.getTime()+3000*24*60*60*1000L); 有效期為3000天
CertificateValidity cv=new CertificateValidity(begindate,enddate); 創建對象
cinfo2.set(X509CertInfo.VALIDITY,cv); 設置有效期
(7)設置新證書序列號
int sn=(int)(begindate.getTime()/1000); 以當前時間為序列號
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2.set(X509CertInfo.SERIAL_NUMBER,csn);
(8)設置新證書簽發者
cinfo2.set(X509CertInfo.ISSUER+"."+CertificateIssuerName.DN_NAME,issuer);應用第三步的結果
(9)設置新證書簽名演算法信息
AlgorithmId algorithm=new AlgorithmId(AlgorithmId.md5WithRSAEncryption_oid);
cinfo2.set(CertificateAlgorithmId.NAME+"."+CertificateAlgorithmId.ALGORITHM,algorithm);
(10)創建證書並使用CA的私鑰對其簽名
X509CertImpl newcert=new X509CertImpl(cinfo2);
newcert.sign(caprk,"MD5WithRSA"); 使用CA私鑰對其簽名
(11)將新證書寫入密鑰庫
ks.setCertificateEntry("lf_signed",newcert);
FileOutputStream out=new FileOutputStream("newstore");
ks.store(out,"newpass".toCharArray()); 這里是寫入了新的密鑰庫,也可以使用第七條來增加條目

⑷ 數字簽名的Java簽名步驟

1、將applet的class文件打包成*.jar(不會的可以在命令行中輸入jar查看幫助)
2 首先我們要生成一個keystore 否則在簽名的時候報如下錯誤
jarsigner 錯誤: java.lang.RuntimeException: 密鑰庫裝入: C:Documents and Settingsij2ee.keystore (系統找不到指定的文件。). (這邊的ij2ee 是我當前系統用戶名)
生成keystore的語句:keytool -genkey -alias 別名你可以自己寫 -keyalg RSA -keystore .keystore
比如我的就是 keytool -genkey -alias ij2ee -keyalg RSA -keystore .keystore
下面是會出現的數字簽名的一些步驟操作:
輸入keystore密碼:
再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]: ij2ee
您的組織單位名稱是什麼?
[Unknown]: mtk
您的組織名稱是什麼?
[Unknown]: mtk
您所在的城市或區域名稱是什麼?
[Unknown]: suzhou
您所在的州或省份名稱是什麼?
[Unknown]: jiangsu
該單位的兩字母國家代碼是什麼
[Unknown]: cn
CN=ij2ee, OU=mtk, O=mtk, L=suzhou, ST=jiangsu, C=cn 正確嗎?
[否]: y
輸入<sfcs>的主密碼
(如果和 keystore密碼相同,按回車):
這時候會在jdk的bin目錄下生成 .keystore 。把這個.keystore文件移動到 C:Documents and Settings當前系統用戶的目錄下面。
3、創建一個數字證書
在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,3650是有效天數,就是10年左右,在創建證書的的時候,需要填寫證書的一些信息和證書對應的私鑰密碼。這些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,都是中文,一看就懂的
keytool -genkey -alias peakCA -keyalg RSA -keysize 1024 -keystore peakCALib -validity 3650
4、將證書導出到證書文件中
在命令行中輸入如下指令,peakCA和peakCALib自己起名字好了,******是你輸入的密碼
keytool -export -alias peakCA -file peakCA.cer -keystore peakCALib -storepass ****** -rfc
5、授權jar文件,在命令行中輸入如下指令
jarsigner -keystore peakCALib myapplet.jar peakCA

閱讀全文

與java簽名證書相關的資料

熱點內容
linuxio阻塞 瀏覽:973
8腳單片機pic 瀏覽:821
如何看彩色塗鴉遮住的字安卓 瀏覽:688
擺渡機器人編程 瀏覽:654
軟程序員著裝 瀏覽:139
寶雞雲存儲伺服器 瀏覽:666
推薦超解壓游戲無廣告 瀏覽:634
大華伺服器怎麼添加門禁 瀏覽:784
戰地伺服器60hz什麼意思 瀏覽:758
成高級程序員學什麼 瀏覽:501
阿里雲接入備案後退掉伺服器 瀏覽:928
ne40e命令 瀏覽:85
安卓輸入法使用什麼編碼 瀏覽:184
手機如何開淘寶店步驟安卓手機 瀏覽:593
創業伺服器不屬於自己怎麼辦 瀏覽:539
mc小游戲手機版伺服器地址 瀏覽:422
土力學李廣信pdf 瀏覽:146
天融信防火牆命令行 瀏覽:214
qq安卓在線怎麼改 瀏覽:688
加密鑽台維修技巧 瀏覽:465