⑴ 做javaweb項目時要把http改為https,有的說直接用keystore生成證書,有的說要買CA證書,到底哪個是正確的
你這個項目 要是自己電腦上測試就不需要,但是你要是想在放在伺服器上並且用瀏覽器訪問那就必須購買證書,然後安裝配置證書
⑵ 如何使用keytool查看CERT.RSA文件和keystore文件內容
1、查看keystore文件內容:
要查看證書keystore中的信息,請運行以下命令:
keytool -list -v -keystore [enter keystore name] -storepass [enter keystore password]
如下:
zr@zr-PC:~/workspace$ keytool -list -v -keystore my_keystore -storepass 123456
密鑰庫類型: JKS
密鑰庫提供方: SUN
您的密鑰庫包含 1 個條目
別名: zr
創建日期: 2014-10-14
條目類型: PrivateKeyEntry
證書鏈長度: 1
證書[1]:
所有者: CN=zeng run, L=Beijing
發布者: CN=zeng run, L=Beijing
序列號: 58ec916d
有效期開始日期: Tue Oct 14 16:19:26 CST 2014, 截止日期: Sat Oct 08 16:19:26 CST 2039
證書指紋:
MD5: C4:73:2F:59:F5:CA:76:C1:10:59:98:E8:F9:23:9E:9E
SHA1: 16:90:E7:D3:E8:ED:9D:E0:5E:47:9A:3B:D4:D4:8E:D0:40:AF:BD:23
SHA256: FF:0F:AF:A5:FA:8F:A8:25:8D:8D:E7:17:08:71:46:CD:60:F1:44:F0:88:81:6F:3E:7B:61:AC:8F:B0:7D:17:CC
簽名演算法名稱: SHA256withRSA
版本: 3
擴展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E6 61 76 EB C6 99 7D 4B F6 B5 75 AD E1 FA 63 E5 .av....K..u...c.
0010: 3C D4 BC 5F <.._
]
]
⑶ 轉/keystore和truststore的區別
keytool是java自帶的工具用於產生密鑰
keystore可以看成一個放key的庫,key就是公鑰,私鑰,數字簽名等組成的一個信息。
truststore是放信任的證書的一個store.
那他們之間有啥關系和聯系呢?在一個安全鏈接的模型中又各自起到什麼作用呢?
其實我也沒搞太清楚-_-b
我先把目前的理解記下來,以後再慢慢修正
這篇主要針對的是web應用,web應用一般是通過https,ssl來做客戶端和server端的鏈接
就以單向驗證為例,伺服器端的app server是tomcat
目前比較常用(我感覺是簡單)的安全方案是單向驗證,也就是說,客戶端IE會驗證伺服器端的身份。這需要在伺服器端做一些配置。
1. 在命令行中通過使用keytool在keystore中生成一個key.
這里就有兩個概念了,keystore和key
key,存放了數字證書(包括公鑰和發布者的數字簽名),以及私鑰
keystore,可以認為是放key的一個倉庫,以文件的形式存在系統中,默認是放在C:\Documents and Settings\user...\下,也可以在命令行中指定路徑和文件名
2.將key以數字證書的形式從keystore中導出,數字證書(包括公鑰和發布者的數字簽名)
3.將數字證書導入到truststore,一般是tomcat所用的JAVA_HOME下的jre\lib\security\cacerts文件
其實,truststore和keystore的性質是一樣的,都是存放key的一個倉庫,區別在於,truststore里存放的是只包含公鑰的數字證書,代表了可以信任的證書,而keystore是包含私鑰的。但是具體應用還有待深入研究,這里我還不是非常清楚
4.配置tomcat下的server.xml里相應的ssl埠,這樣客戶端就可以通過https來訪問server了
⑷ 使用keystore生成的證書怎麼查看
在命令窗口中輸入命令:keytool -list -v -keystore android.keystore
(根據上一篇講的,此時我已經將簽名證書復制到了當前項目文件下,所以命令路徑即為臨時文件android.keystore的路徑)
修改keystore的密碼,別名等
1:修改密碼的命令:keytool -storepasswd -keystore android.keystore
其中,my.keystore是復制出來的簽名證書文件,命令執行後會提示證書的當前密碼和新密碼及其確認。
2:修改別名alias的命令:keytool -changealias -keystore android.keystore -alias my_name -destalias androiddebugkey
這里,my_name是證書中當前的alias,-destalias指定的是要修改為的alias,例如我將別名改為如下:
⑸ 如何用已有的證書文件和私鑰文件生成keystore
首先不能使用java的類庫.除非你使用了JNI但是與其這樣,不如直接使用JAVA第二訪問https可以使用OpenSSL,keystore文件中的證書只是個密鑰.提取出來後完全可以用一般的SSL方式進行post或者get連接代碼互聯網上有的是
⑹ keystore怎麼生成證書和密鑰
步驟:
1.生成server端密鑰
[html] view plain
1. keytool -genkey -alias serverkey -keystore key OfServer.keystore
之後會出現如下信息,(第一次輸入密碼:打開keystore文件密碼,第二次密碼為秘鑰,一般兩次密碼相同)
根據私鑰導出服務端證書(將把證書庫 monitor.keystore中的別名為 serverkey的證書導出到KeyOfServer.cer證書文件中,它包含證書主體的信息及證書的公鑰,不包括私鑰,可以公開。)
[html] view plain
1. keytool -export -alias serverkey -keystore keyOfServer.keystore -file server.crt
將服務端證書,加入客戶端的認證證書列表中(只包含公鑰)
[html] view plain
1.keytool -import -alias serverkey -file server.crt -keystore trustOfClient.keystore
2:生成client端密鑰
[html] view plain
1. keytool -genkey -alias clientkey -keystore keyOfClient.keystore <span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
根據私鑰導出客戶端證書
[html] view plain
1. keytool -export -alias clientkey -keystore keyOfClient.keystore -file client.crt
將證書加到服務端信任列表
[html] view plain
1. keytool -import -alias serverkey -file client.crt -keystore trustOfServer.keystore
至此,客戶端和伺服器端的證書都已經生成了
⑺ keystore是怎麼生成的
1、trust.keystore的生成
比較簡單,可以通過keytool工具,用對端的證書文件(比如server.cer)來生成:
keytool -import -alias "my server cert" -file server.cer -keystore my.truststore
2、my.keystore的生成
用keytool命令直接生成,比如:
keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore
⑻ 如何從keystore文件中取出證書和密鑰
看不懂需求,是說export嗎? http://blog.csdn.net/guo_rui22/article/details/3947716
⑼ 如何用已有的證書文件和私鑰文件生成keystore-CSDN論壇
(1)公私鑰
使用Openssl公鑰私鑰用於外部商戶系統xxx系統間報文安全性驗證使用者需要公私鑰直接報文進行處理則參考第四部計算摘要及簽名值
1. 安裝openssl步驟直接點擊exe文件現需要安裝vs2008插件直接忽略
2. 安裝程找OpenSSL相應安裝目錄進入bin目錄找openssl.exe執行文件點擊運行別按順序輸入命令:
a. genrsa –out private-rsa.key 1024
說明:該命令沒加密私鑰
genrsa 私鑰文件私鑰存儲private-rsa.key度1024out面指定輸文件名
private-rsa.key 私鑰文件該文件必須經處理私鑰
b. req –new –x509 –key private-rsa.key –days 750 –outpublic-rsa.cer
說明:根據private-rsa.key證書public-rsa.cer
-new 表示新請求
-509 表示輸證書結構
750表示證書效數
-out public-rsa.cer -out面表示公鑰證書用於驗證數字簽名公鑰證書或者公鑰需要提前發送給需要驗證本單位或部門數據接收
c. pkcs12 –export –name test-alias –in public-rsa.cer–inkey private-rsa.key –out 99bill-rsa.pfx
說明:PKCS12 格式Keystore
密碼前輸入要緻密碼用Keystore公私鑰程用
Public-rsa.cer, private-rsa.key前
附1:
述代碼99bill-rsa.pfx獲取私鑰Java版本代碼private-rsa.key私鑰直接使用必須進行定處理
代碼幾注意點:
文件流初始化路徑需要根據自實際路徑填寫
密碼第二節c步驟密碼本實例輸入suning
KeyStorekeyStore = KeyStore.getInstance("PKCS12");
= newFileInputStream("D:/OpenSSL/bin/99bill-rsa.pfx");
char[]nPassword = "suning".toCharArray();
StringkeyAlias = null;
keyStore.load(fileInputStream,nPassword);
fileInputStream.close();
System.out.println("keystoretype=" + keyStore.getType());
Enumerationenumeration = keyStore.aliases();
if(enumeration.hasMoreElements())
{
keyAlias = (String) enumeration.nextElement();
System.out.println("alias=[" + keyAlias +"]");
}
System.out.println("iskey entry=" + keyStore.isKeyEntry(keyAlias));
PrivateKeyprikey = (PrivateKey) keyStore.getKey(keyAlias, nPassword);
//私鑰轉字元串
StringprivateStr = Base64.encodeBase64String(prikey.getEncoded()).trim();
//公鑰字元串通cer證書
Certificatecert = keyStore.getCertificate(keyAlias);
PublicKeypubkey = cert.getPublicKey();
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
注意:
1. 所用類說明:
Base64:
import org.apache.commons.net.util.Base64;
Certificate:
import java.security.cert.Certificate;
2. openssl公私鑰程用戶輸入密碼本例密碼suning
1. 摘要及
摘要程(digest全部實現述3程):
1. 根據key傳map數據排序;
2. a1=b1&a2=b2&a3=b3形式字元串排除某些字元串Key值;
3. 調用digest進行md5編碼;
三步均通Digest.digest()實現:
String digest = Digest.digest(Map map, String... keys);
傳遞http報文體body內容a1=b1&a2=b2&a3=b3形式字元串提取需要加簽字元串並轉map形式execludeKes要排除欄位字元串數組
計算摘要步關鍵選取欄位要求發送接收必須致即發送哪些欄位計算摘要同接收必須相同欄位計算摘要否則報6601錯誤
說明:a. Map存儲計算摘要欄位
b. keys表示排除欄位能用於計算摘要欄位signature,signAlgorithm
2. 公鑰證書及字元串轉換
轉換目:便於存儲(商戶直接提供公鑰證書於向驗簽系統提供公鑰字元串商戶需要用述代碼公鑰轉字元串)
1. 公鑰/私鑰字元串轉公鑰/私鑰主要字元串轉公鑰PublicKey
X509EncodedKeySpec pubKeySpec = newX509EncodedKeySpec(Base64.decodeBase64(strPubKey));
KeyFactorykeyFactory = KeyFactory.getInstance(RSA);
PublicKeypubKey = keyFactory.generatePublic(pubKeySpec);
2. 公鑰或私鑰轉Base64字元串:
StringpublicStr = Base64.encodeBase64String(pubKey.getEncoded()).trim();
3. 公私鑰驗證
驗證目:公私鑰需要驗證否匹配(前許商戶公私鑰混亂確定公私鑰否匹配添加驗簽系統)代碼由用戶自用junit驗證運行驗證公私鑰否確resulttrue則說明公私鑰確;否則公私鑰問題能使用
String prik1 ="";
String pubb ="";
String data ="wkk";
String digest =Digest.digest(data);
PrivateKey privateKey =RSAUtil.getPrivateKey(prik1);
String sign =RSAUtil.sign(digest, privateKey);
boolean result =RSAUtil.vertiy(digest, sign,
RSAUtil.getPublicKey(pubb));
System.out.println(result);
⑽ 如何導入.cer證書到Java keystore
Der/Cer證書導入來:
要從某個文源件中導入某個證書,使用keytool工具的-import命令:
keytool -import -file mycert.der -keystore mykeystore.jks
如果在 -keystore 選項中指定了一個並不存在的密鑰倉庫,則該密鑰倉庫將被創建。
如果不指定 -keystore 選項,則預設密鑰倉庫將是宿主目錄中名為 .keystore 的文件。如果該文件並不存在,則它將被創建。