https证书识别和转换

12 篇文章 0 订阅
5 篇文章 0 订阅

1.证书识别:

安全证书如下:

-----BEGIN CERTIFICATE----- ... ... ... -----END CERTIFICATE-----
普通私钥如下:

-----BEGIN PRIVATE KEY----- ... ... ... -----END PRIVATE KEY-----
RSA 私钥如下:

-----BEGIN RSA PRIVATE KEY----- ... ... ... -----END RSA PRIVATE KEY-----
一般使用安全证书和 RSA 私钥,普通私钥需要转化为 RSA 私钥。

2.含有私钥和公钥的证书转换为keystore

最近接触的项目中用到HTTPS,并且申请了证书以及私钥,这一块接触的少 先整理出来,谨防以后忘记。因为是tomcat中配置的https,需要将证书转成keystore文件,通过openssl 先通过证书以及私钥文件生成p12证书,再通过JAVA的keytool 生成keystore文件

  1. 准备工作:上传证书和rsa私钥的key
  2. 申请的证书有证书链,可以右键以文本打开,把证书里的内容按从下至上的顺序复制到一个新建的文件里allinone.cer
  3. 将allinone.cer和payment.private.key上传至服务器当中
  4. 敲入以下命令,过程中会需要你输入两遍password,需要记住。输入完吼将会生成p12,具体参数命令可以自行百度,不过这个字面意思已经很直白了,就不做叙述

openssl pkcs12 -export -in /root/allinone.cer -inkey /root/payment.private.key -out /root/projectX.p12

通过上面步骤的命令,我们再将projectX.p12文件转为keystore

keytool -importkeystore -v  -srckeystore /root/projectX.p12 -srcstoretype pkcs12 -srcstorepass changeit(p12刚输入的密码) -destkeystore /root/payment.keystore -deststoretype jks -deststorepass changeit(keystore密钥库的密码)

  • 开始配置tomcat,编辑 $TOMCAT_HOME/conf/server.xml
  • 找到https相关的配置,注意区分keystoreFile keystorePass大小写,否则会不生效,并且会提示找不到文件或者密码错误相关提示
  • ps:p12的密码好像需要跟keystore密码一致,否则会报错,不知道是不是哪个环节出了问题

<Executor name="tomcatThreadPoolHttps" namePrefix="catalina-exec-https-" maxThreads="6000" minSpareThreads="100" maxIdleTime="120000" />

<Connector executor="tomcatThreadPoolHttps" port="8443" redirctPort="6064" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxHttpHeaderSize="8192" acceptCount="1000" enableLookups="false" scheme="https" secure="true"keystoreFile="/root/payment.keystore" keystorePass="changeit" clientAuth="false" sslProtocol="TLSv1.2" />

3.其他类型证书转换

3.1  cer或者crt转jks

keytool -import -trustcacerts -alias 别名名字 -file 证书名字.cer -keystore 导出证书名字.jks

keytool -import -trustcacerts -alias 别名名字,随便取 -file 证书名字.crt -keystore test2.jks

 

3.2  cer+pem 转jks

openssl pkcs12 -export -in CsssssD.cer(证书) -inkey UUUUUU.pem(private key) -out ./testP12.p12

keytool -importkeystore -v -srckeystore testP12.p12 -srcstoretype pkcs12 -srcstorepass password(密码) -destkeystore server.jks -deststoretype jks -deststorepass password(密码)

4.其他说明: 

loadKeyMaterial()重载方法是加载客户端证书用的
loadTrustMaterial()重载方法是加载服务器端相关信息用的(我们就是使用 loadTrustMaterial(TrustStrategy trustStrategy) 方法自己实现了一个信任策略,不对服务器端的证书进行校验),

在生成HttpClient的时候,指定相应的 SSLSocketFactory,之后,使用这个HttpClient发送的GET请求和POST请求就自动地附加上了证书信息

如果我们只需要忽略掉对服务器端证书的验证,而不需要发送客户端证书信息,在构建SSLContext的时候,只需要 loadTrustMaterial() 不需要 loadKeyMaterial()
                SSLContext sslcontext = SSLContexts.custom()
                //忽略掉对服务器端证书的校验
                .loadTrustMaterial(new TrustStrategy() {
                    @Override
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        return true;
                    }
                })
                
                //加载服务端提供的truststore(如果服务器提供truststore的话就不用忽略对服务器端证书的校验了)
                //.loadTrustMaterial(new File("D:\\truststore.jks"), "123456".toCharArray(),
                //        new TrustSelfSignedStrategy())
                .loadKeyMaterial(keyStore, "cmcc".toCharArray())
                .build();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                sslcontext,
                new String[]{"TLSv1"},
                null,
                SSLConnectionSocketFactory.getDefaultHostnameVerifier());
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslConnectionSocketFactory)
                .build();

借鉴:https://www.cnblogs.com/jiaoyiping/p/5469660.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值