2011-05-06 50 views
18

我想BouncyCastle的添加爲在Windows XP專業版安全提供這樣我就可以用它來一些證書添加到每個指令here一個Android應用程序。不幸的是,我無法得到它來添加提供者。BouncyCastle的安裝問題

我有:

  1. 下載提供商C:\Program Files\Java\jre6\lib\ext\
  2. 增加C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar%CLASSPATH%
  3. 添加security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider到java.security(7爲在次序中的下一INT)。

當我運行:

keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword 

我收到以下錯誤信息:

keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider 

我也嘗試動態地添加它:

import java.security.Provider; 
import java.security.Security; 
import java.util.Enumeration; 

import org.bouncycastle.jce.provider.BouncyCastleProvider; 

public class BouncyCastleMain { 

    public static void main(String[] args) throws Exception { 
     Security.addProvider(new BouncyCastleProvider()); // add it 
     try { // list them out 
      Provider p[] = Security.getProviders(); 
      for (int i = 0; i < p.length; i++) { 
       System.out.println(p[i]); 
       for (Enumeration<?> e = p[i].keys(); e.hasMoreElements();) 
        System.out.println("\t" + e.nextElement()); 
      } 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

起初我編譯java類時出現訪問錯誤,但將其更改爲每s的警告偷菜here。現在,當我運行代碼時,它會在提供程序列表中顯示BouncyCastle,但在程序完成後它不會停留。

我敢肯定,它必須是可行的,但我在陷入困境如何讓安裝這個傢伙足夠長的時間來運行密鑰工具使用它。是否有可能通過java API運行keytool,或者是否有一些我錯過了的步驟可以讓供應商堅持下去?

謝謝!

回答

25

-providerName選項需要提供商名稱( 「BC」,在這種情況下),而不是一個類名。另一種選擇,-providerClass,確實需要一個類名,而當供應商沒有在java.security文件中註冊它是有用的。

當您註冊供應商「編程」,這只是暫時的。您的程序每次運行時都必須重新註冊其提供程序。如果您的目標是使BouncyCastle可用於keytool,則無法使用此方法。

由於您已經安裝了提供程序(通過將歸檔文件放入lib/ext並將其列在java.security中),使用-providerName BC選項可能是最簡單的解決方案。或者,您可以使用-providerClass org.bouncycastle.jce.provider.BouncyCastleProvider選項。

順便說一句,你不應該使用CLASSPATH環境變量。 lib/ext中的庫已經在類路徑中。

如果修正選項之後,你仍然可以獲得一個NoSuchProviderException(使用-providerName)或ClassNotFoundException(使用-providerClass),請確認您使用的keytool正確副本。也就是說,執行時指定keytool的完整路徑,而不是依賴於您的PATH變量。確保路徑引用安裝了BouncyCastle的JRE。一個系統擁有多個JRE和JDK並不罕見。

+1

原來我安裝了6個不同的jres/jdks!我從以前的員工那裏繼承了這臺PC,只知道其中兩個。驗證正確的路徑修復它。謝謝! – 2011-05-10 21:17:53

+0

我試圖獎勵賞金,它說我不得不等待21個小時。我想他們想確保有一整天的時間來確保一切都是同步的。不要擔心,我微不足道的+250很快就會讓你的56K更高。 :) – 2011-05-10 21:20:04

+0

優秀!很高興它是固定的。 – erickson 2011-05-10 21:47:26

1

如果您在Windows上,請不要忘記以管理員身份啓動命令行以輸入keytool命令。