1、下载bcprov-ext-jdk15on-150.jar
http://downloads.bouncycastle.org/java/bcprov-ext-jdk15on-150.jar
2、确认系统的keytool环境为你要操作的jre环境
3、将bcprov-ext-jdk15on-150.jar复制到%JRE_HOME%\lib\ext,与%JDK_HOME%\jre\lib\ext下
4、修改%JRE_HOME%\lib\security\java.security,与%JDK_HOME%\jre\lib\security\java.security
往最后添加,前面已经有10个了
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
5、cmd命令下面进行运行
keytool -genkey -alias androidbks -keypass 11111111 -keyalg RSA -keysize 1024 -validity 365 -keystore bksserver.keystore -storepass 111111 -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
6、在C:\Users\Administrator生成bksserver.keystore文件
7、分别生成服务器端的私钥与证书和客户端私钥的和证书,并把客户端添加向服务器端,服务器端添加向客户端信任
C:\Users\Administrator>keytool -genkey -alias serverkey -keypass 1993821924 -key alg RSA -keysize 1024 -validity 365 -keystore kserver.keystore -storepass 199382 1924 -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider 您的名字与姓氏是什么? [Unknown]: mei 您的组织单位名称是什么? [Unknown]: ccniit 您的组织名称是什么? [Unknown]: ccniit 您所在的城市或区域名称是什么? [Unknown]: chengdu 您所在的省/市/自治区名称是什么? [Unknown]: chengdu 该单位的双字母国家/地区代码是什么? [Unknown]: cn CN=mei, OU=ccniit, O=ccniit, L=chengdu, ST=chengdu, C=cn是否正确? [否]: y C:\Users\Administrator>keytool -export -alias serverkey -keystore kserver.keysto re -file server.crt -storetype BKS -provider org.bouncycastle.jce.provider.Bounc yCastleProvider C:\Users\Administrator>keytool -import -alias serverkey -keystore tclient.keysto re -file server.crt -storetype BKS -provider org.bouncycastle.jce.provider.Bounc yCastleProvider C:\Users\Administrator>keytool -import -genkey -alias clientkey -storetype BKS - provider org.bouncycastle.jce.provider.BouncyCastleProvider C:\Users\Administrator>keytool -export -alias clientkey -keystore klient.keystor e -file client.crt -storetype BKS -provider org.bouncycastle.jce.provider.Bouncy CastleProvider C:\Users\Administrator>keytool -genkey -alias clientkey -keystore klient.keystor e -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider C:\Users\Administrator>keytool -export -alias clientkey -keystore klient.keystor e -file client.crt -storetype BKS -provider org.bouncycastle.jce.provider.Bouncy CastleProvider C:\Users\Administrator>keytool -import -alias clientkey -file client.crt -keysor e tserver.keystore -storetype BKS -provider org.bouncycastle.jce.provider.Bouncy CastleProvider C:\Users\Administrator>keytool -import -alias clientkey -file client.crt -keysto re tserver.keystore -storetype BKS -provider org.bouncycastle.jce.provider.Bounc yCastleProvider
android上读取store文件
package com.example.ssl; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.security.KeyStore; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { private static final int SERVER_PORT = 50030;// 端口号 private static final String SERVER_IP = "218.206.176.146";// 连接IP private static final String CLIENT_KET_PASSWORD = "123456";// 私钥密码 private static final String CLIENT_TRUST_PASSWORD = "123456";// 信任证书密码 private static final String CLIENT_AGREEMENT = "TLS";// 使用协议 private static final String CLIENT_KEY_MANAGER = "X509";// 密钥管理器 private static final String CLIENT_TRUST_MANAGER = "X509";// private static final String CLIENT_KEY_KEYSTORE = "BKS";// 密库,这里用的是BouncyCastle密库 private static final String CLIENT_TRUST_KEYSTORE = "BKS";// private static final String ENCONDING = "utf-8";// 字符集 SSLSocketFactory sf; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { initKey(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // 首先初始化客户端密钥以及客户端信任密钥库信息 private void initKey() throws Exception { // 取得SSL的SSLContext实例 SSLContext sslContext = SSLContext.getInstance(CLIENT_AGREEMENT); // 取得KeyManagerFactory实例 KeyManagerFactory keyManager = KeyManagerFactory .getInstance(CLIENT_KEY_MANAGER); // 取得TrustManagerFactory的X509密钥管理器 TrustManagerFactory trustManager = TrustManagerFactory .getInstance(CLIENT_TRUST_MANAGER); // 取得BKS密库实例 KeyStore clientKeyStore = KeyStore.getInstance("BKS"); KeyStore trustKeyStore = KeyStore.getInstance(CLIENT_TRUST_KEYSTORE); // 加载证书和私钥,通过读取资源文件的方式读取密钥和信任证书(kclient:密钥;t_client:信任证书) clientKeyStore.load(getResources().openRawResource(R.raw.tclient), CLIENT_KET_PASSWORD.toCharArray());// kclient:密钥 // t_client:信任证书 trustKeyStore.load(getResources().openRawResource(R.raw.klient), CLIENT_TRUST_PASSWORD.toCharArray()); // 初始化密钥管理器、信任证书管理器 keyManager.init(clientKeyStore, CLIENT_KET_PASSWORD.toCharArray()); trustManager.init(trustKeyStore); // 初始化SSLContext sslContext.init(keyManager.getKeyManagers(), trustManager.getTrustManagers(), new java.security.SecureRandom()); sf = sslContext.getSocketFactory(); } // 访问服务器,获取响应数据 private String getData(String url) throws Exception { HttpsURLConnection conn = (HttpsURLConnection) new URL(url) .openConnection(); conn.setSSLSocketFactory(sf); conn.setRequestMethod("GET"); conn.setConnectTimeout(10 * 1000); conn.setDoOutput(true); conn.setDoInput(true); conn.connect(); BufferedReader br = new BufferedReader(new InputStreamReader( conn.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) sb.append(line); return sb.toString(); } }
相关推荐
Java Keytool 是 Java 自带的一个密钥和证书管理工具,能够管理自己的公钥/私钥对及相关证书,用于自我认证、数据完整性以及认证服务。Keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中,缺省的密钥仓库...
而`bks`(Bouncy Castle Key Store)文件是Android系统中广泛使用的另一种类型的密钥库,它同样用于存储证书和私钥,但它是基于开源的Bouncy Castle加密库。 `jks`到`bks`的转换过程通常是为了适应Android系统的...
2. **BKS格式的私钥和信任证书**:Android平台对私钥和信任证书的格式有特殊要求,需要是BouncyCastle支持的BKS(Bouncy Castle KeyStore)格式。BouncyCastle是一个开源的Java密码学API,提供了更丰富的加密算法...
`.cer`文件通常用于存储公钥证书,而`.jks`(Java Keystore)文件则是Java平台中用于存储密钥对和信任证书的标准格式。转换过程涉及使用`keytool`命令行工具,该工具是JDK的一部分。 #### 操作步骤 - 首先,确保...
在Android平台上,BKS(Bouncy Castle KeyStore)是一种用于存储和管理数字证书及密钥的文件格式。它是Android系统自带的一种KeyStore实现,主要服务于应用程序的安全通信,特别是在使用HTTPS或者进行SSL/TLS握手时...
常见的数字证书格式有 X.509,它定义了两种证书:公钥证书和属性证书。 X.509 证书格式由以下部分组成: * 证书元数据(Certificate Metadata):包括证书所有者的信息、证书序列号、有效期限、公钥信息等。 * ...
- **keytool**:Java自带的工具,用于管理和保护用户的公钥/私钥对及证书,存储于密钥仓库(keystore)中,如JKS和JCEKS。 - **JKS**:Sun提供的密钥库类型,适用于基本需求。 - **JCEKS**:使用SunJCE Provider...
3. **生成客户端证书**:同样使用`keytool -genkey`,但指定`storetype PKCS12`,生成PKCS12格式的KeyStore,适用于浏览器或应用程序客户端。 4. **导出客户端证书**:与服务器端证书相同,导出客户端证书为PEM格式...
PFX(PKCS#12)是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。 UBER 比较特别,当密码是通过...
5. **信任和撤销证书**:Portecle支持管理信任存储,你可以添加、删除和查看信任的证书。此外,如果证书被撤销,Portecle也可以帮助你处理这种情况。 6. **导出和导入证书**:在不同系统间转移证书时,Portecle提供...
BKS(Bouncy Castle Keystore)是Android上常用的SSL证书存储格式。为了实现SSL加密,需要一个包含私钥和公钥证书的密钥库。用户需要自行生成这个BKS文件,通常可以使用Keytool或Portecle等工具。生成的BKS文件包含...
描述中的“用于转换 jks 证书成 bks”提示我们,这个压缩包可能包含了将Java Key Store (JKS)格式的证书转换为Bouncy Castle Key Store (BKS)格式的工具或资源。JKS是Java默认的密钥存储格式,而BKS是由Bouncy ...
可以使用Keytool工具生成密钥对和证书请求(CSR),然后将CSR提交给CA,由CA签发客户端证书。生成的Keystore文件通常以.bks格式存储,就像您压缩包中的文件名一样。 **2. 配置SSLContext** 在Android代码中,我们...