「javabks证书」jks证书是什么

博主:adminadmin 2022-11-29 13:59:09 76

本篇文章给大家谈谈javabks证书,以及jks证书是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何生成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证书是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。