「javabks证书」jks证书是什么
本篇文章给大家谈谈javabks证书,以及jks证书是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、如何生成android的BKS证书
- 2、配置http和tcp支持ssl
- 3、Android SSL BKS证书问题
- 4、java中怎么获取jks证书文件中的内容
- 5、如何添加证书到system\etc\security\cacerts.bks
- 6、如何访问一个SSL连接通过Android的
如何生成android的BKS证书
android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库,如果生成BKS的则需要下载BC库,如是JDK1.6则下载bcprov-jdk16-141.jar,且将该文件放到jdk1.6.0_03\jre\lib\ext目录下,然后运行以下命令即可以生成BKS的证书库和相应的证书。
keytool -genkey -alias 别名 -keypass 密钥口令 -keyalg RSA -keysize 1024 -validity 365 -keystore 库文件名,如runcerts.keystore -storepass 证书库密码 -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
顶
1
踩
android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库,如果生成BKS的则需要下载BC库,如是JDK1.6则下载bcprov-jdk16-141.jar,且将该文件放到jdk1.6.0_03\jre\lib\ext目录下,然后运行以下命令即可以生成BKS的证书库和相应的证书。
keytool -genkey -alias 别名 -keypass 密钥口令 -keyalg RSA -keysize 1024 -validity 365 -keystore 库文件名,如runcerts.keystore -storepass 证书库密码 -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
顶
1
踩
配置http和tcp支持ssl
最近由于apple ATS的关系,公司的所有后台都需要采用安全连接;后台对外的接口主要包括两种形式:
对外服务都是通过nginx进行访问,目前采用的是客户端单向认证服务端,因此只要在nginx进行配置即可:
另外为了提高nginx ssl的性能,可以增加额外的配置项,例如 ssl_session_cache ;
证书和私钥都是PEM格式(文本),如果是自签名的,可以通过如下方式产生:
由于客户端需要验证服务端,因此需要将证书分发给客户端:
注:ios需要二进制格式的证书,因此需要转换下
注:ios需要BKS格式的证书,和java端的JKS类似,因此需要转换下
tcp是通过haproxy进行配置:
可以通过如下方式产生:
注:server.pem格式为PEM,由证书和私钥组成,服务器发送客户端只会发送证书;实际上nginx也可以把证书和私钥放在一个文件
安装配置好之后,可以通过nmap提供的工具查看服务端的证书和协议版本,算法套装等信息,下图以百度为例:
**注意:nmap提高的脚本,对端口进行了限制,因此如果你的应用的访问端口不是443,需要修改脚本,通常情况下,脚本位于 /usr/share/nmap/scripts ,
Java对SSL,TLS的支持情况,可以参考这篇 文章 ,为避免出现类似情况,需要通过 ssl_ciphers 指令进行相关配置;
另外由于openssl会用到随机数,可以参考这篇 文章 进行配置;
1. 配置https服务器
2. haproxy ssl配置
3. Setting up SSL termination for a TCP upstream
4. Netty ssl
5. Ios9之适配ATS
Android SSL BKS证书问题
先将两个文件变成 pfx 格式证书 然后 安装 安装时候注意 有一个选项是和 导出能否带有 私钥相关的 复选框 倒进去之后 可以在个人处看到证书
这时候 导出 选择导出私钥
已经有了 另一个pfx格式的 文件后输入
keytool -importkeystore -srckeystore path\name.pfx -destkeystore path\name.bks -srcstoretype PKCS12 -deststoretype BKS
windows下的命令 keytool命令的 相关jar自己找
这样就已经变成bks格式的了
java中怎么获取jks证书文件中的内容
JavaKeyStore的类型JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型(我所知道的共有5种,JKS,JCEKS,PKCS12,BKS,UBER)。JKS的Provider是SUN,在每个版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我们都能够直接使用它。JCEKS在安全级别上要比JKS强,使用的Provider是JCEKS(推荐),尤其在保护KeyStore中的私钥上(使用TripleDes)。PKCS#12是公钥加密标准,它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为PFX文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作,读者可以用Keytool去TryTry。UBER比较特别,当密码是通过命令行提供的时候,它只能跟keytool交互。整个keystore是通过PBE/SHA1/Twofish加密,因此keystore能够防止被误改、察看以及校验。以前,SunJDK(提供者为SUN)允许你在不提供密码的情况下直接加载一个Keystore,类似cacerts,UBER不允许这种情况。证书导入Der/Cer证书导入:要从某个文件中导入某个证书,使用keytool工具的-import命令:1keytool-import-filemycert.der-keystoremykeystore.jks如果在-keystore选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。如果不指定-keystore选项,则缺省密钥仓库将是宿主目录中名为.keystore的文件。如果该文件并不存在,则它将被创建。创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。可使用-list命令来查看密钥仓库里的内容:1keytool-list-rfc-keystoremykeystore.jksP12格式证书导入:keytool无法直接导入PKCS12文件。第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。新生成的pfx不能被导入到keystore中,报错:keytool错误:java.lang.Exception:所输入的不是一个X.509认证。新生成的pfx文件可以被当作keystore使用。但会报个错误asunknownattr1.3.6.1.4.1.311.17.1,查了下资料,说IE导出的就会这样,使用Netscape就不会有这个错误.第三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误:java.io.IOException:failedtodecryptsafecontentsentry。需要通过OpenSSL转换一下:1opensslpkcs12-inmycerts.pfx-outmycerts.pem2opensslpkcs12-export-inmycerts.pem-outmykeystore.p12通过keytool的-list命令可检查下密钥仓库中的内容:1keytool-rfc-list-keystoremykeystore.p12-storetypepkcs12这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。P7B格式证书导入:keytool无法直接导入p7b文件。需要将证书链RootServer.p7b(包含根证书)导出为根rootca.cer和子rootcaserver.cer。将这两个证书导入到可信任的密钥仓库中。1keytool-import-aliasrootca-trustcacerts-filerootca.cer-keystoretestkeytrust.jks遇到是否信任该证书提示时,输入y1keytool-import-aliasrootcaserver-trustcacerts-filerootcaserver.cer-keystoretestkeytrust.jks总结P12格式的证书是不能使用keytool工具导入到keystore中的TheSun'sPKCS12Keystore对从IE和其他的windows程序生成的pfx格式的证书支持不太好.P7B证书链不能直接导入到keystore,需要将里面的证书导出成cer格式,再分别导入到keystore。
如何添加证书到system\etc\security\cacerts.bks
一:
获取cacerts.bks文件到你的计算机中,可使用Android模式器,也可USB连接你的手机。
adb pull /system/etc/security/cacerts.bks cacerts.bks
二:
在PC上安装Java环境,然后下载这个文件 bcprov-jdk16-141.jar,放入java安装目录下的/lib/ext/目录中。
bcprov-jdk16-141.jar到Linux公社的1号FTP服务器里,下载地址:
FTP地址:" target="_blank"
用户名:
密码:
在 2011年LinuxIDC.com\5月\Android(cacerts.bks)添加根证书
下载方法见
将第一步中取得的cacerts.bks与你要添加的CA证书放在同一级目录下,CA证书为crt或cer格式。
如何访问一个SSL连接通过Android的
在用Android平台上使用SSL,需要三步:
第一步 生成证书
1. 生成服务器端的证书
keytool -genkey -alias test -keystore test.jks
2. 将keystore中的cert导出来,用来生成客户端的验证证书
keytool -exportcert -alias test -file test.cert -keystore test.jks
3. 生成Android平台的证书
因为Android 要求要BC证书,而Java的keytool本身不提供BKS格式,因此要自己
手动配置。个人在配置的过程到了文件正在使用中,保存失败的情况,我的做法是将
文件备份一下,用unlocker删除后将修改好备份放到原位置就好了。方法如下:
(1) 下载 bcprov-ext-jdk15on-146.jar
可以选择到官网,也可以到我上传好的文件去下载,注意,用最新的149版本的会
有证书版本号不对的异常,改用146的则没有这个问题
(2) 配置bcprov
在 jdk_home\jre\lib\security\目录中找到 java.security 在内容增加一行(数字
可以自己定义)
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
(3) 生成android平台的证书
keytool -importcert -keystore test.bks -file test.cert -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
第二步 编写服务器代码(主要代码如下)
import java.io.BufferedInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ServerSocketFactory;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
/**
* @TODO java线程开发之四 SSL加密
* 开发步骤
* 1.生成服务端密钥
* 2.导出服务端证书
* 3.生成客户端密钥
* 4.程序开发测试
* 参考资料:
* @version 1.0
* @date 2013-5-7 23:22:45
* @update 2013-5-8 10:22:45
*/
public class Server {
private ServerSocket serverSocket;
private final static char[] password="1qaz2wsx".toCharArray();
private SSLContext context;
private InputStream inputStream;
public Server() {
inputStream=this.getClass().getResourceAsStream("/test.jks");
initContext();
try {
//直接运行会报 javax.net.ssl.SSLException:
//ServerSocketFactory factory= SSLServerSocketFactory.getDefault();
ServerSocketFactory factory= context.getServerSocketFactory();
// serverSocket = new ServerSocket(10000);
serverSocket=factory.createServerSocket(10000);
System.out.println("======启动安全SocektServer成功=========");
while (true) {
Socket socket = serverSocket.accept();
new ReceiveSocket(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//ssl 上下文对象的初始化
private void initContext() {
try {
KeyStore store=KeyStore.getInstance("JKS");
store.load(inputStream, password);
KeyManagerFactory factory=KeyManagerFactory.getInstance("SunX509");
factory.init(store,password);
KeyManager []keyManagers=factory.getKeyManagers();
context=SSLContext.getInstance("SSL");
context.init(keyManagers, null , null);
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server();
}
private class ReceiveSocket extends Thread {
private Socket socket;
public ReceiveSocket(Socket socket) {
this.socket = socket;
}
private ObjectInputStream reader;
private ObjectOutputStream writer;
@Override
public void run() {
try {
reader=new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
//writer=new ObjectOutputStream(socket.getOutputStream());
// 开启无限循环 监控消息
//java.io.EOFException
Object obj= reader.readUTF();
SocketAddress address = socket.getRemoteSocketAddress();
System.out.println(address.toString() + "\t" + obj);
// Object obj= reader.readObject();
// if(obj!=null)
// {
// User user =(User)obj;
// System.out.println("id=="+user.getPassword()+"\tname=="+user.getName());
// }
// while (true) {}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != writer) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
第三步 Android端代码
主要是发送数据的代码
protected Void doInBackground(Void... params) {
Log.i(TAG, "doInBackground");
try {
SSLContext context;
KeyStore ts = KeyStore.getInstance("BKS");
ts.load(getResources().openRawResource(R.raw.test),
"1qaz2wsx".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory
.getInstance("X509");
tmf.init(ts);
TrustManager[] tm = tmf.getTrustManagers();
context = SSLContext.getInstance("SSL");
context.init(null, tm, null);
SocketFactory factory = context.getSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(
"192.168.70.249", 10000);
ObjectOutputStream out = new ObjectOutputStream(
socket.getOutputStream());
out.writeUTF(UUID.randomUUID().toString());
out.flush();
System.out.println("========客户端发送成功=========");
;
socket.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
以上是主要流程代码,可以根据自身需要适当进行修改
关于javabks证书和jks证书是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。