今天在做开发时候,遇到对方在提供了证书文件如:****.jks,或*****.store文件时候,我们如何生成带证书签名的请求。
首先,在请求中会用到二个重要的类HttpsURLConnection和密钥管理类KeyManager,这两个类大家可以谷哥或度娘查看具体介绍。
不多说,直接上实现类
import java.io.FileInputStream; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.SocketAddress; import java.net.URL; import java.security.KeyStore; import java.security.SecureRandom; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import com.ebiz.framework.BaseConst; public class HttpUtil { public void send() throws Exception { KeyStore ks = initKeyStore("你的证书密码", "你的证书地址"); KeyManagerFactory keyManagerFactory = initKeyManagerFactory(ks, "你的证书密码"); SSLContext ssf = initSSLContext(keyManagerFactory.getKeyManagers(), null, new SecureRandom()); URL url = new URL("你的https地址"); HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); httpsConn.setSSLSocketFactory(ssf.getSocketFactory()); httpsConn.setRequestMethod("POST"); httpsConn.setDoOutput(true); httpsConn.setDoInput(true); InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream()); StringBuffer result = new StringBuffer(); // 读取服务器的响应内容并显示 int respInt = insr.read(); while (respInt != -1) { result.append((char) respInt); respInt = insr.read(); } System.out.println(result.toString()); } /** * 初始化SSLContext * * @param keyManager * 密钥管理器 * @param trustManager * 信任管理器,判断返回请求 * @param secureRandom * 随机数 * @return * @throws Exception */ public static SSLContext initSSLContext(KeyManager[] keyManager, TrustManager[] trustManager, SecureRandom secureRandom) throws Exception { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(keyManager, trustManager, secureRandom); return sslContext; } /** * 初始化密钥管理器 * * @param ks * @param keyPwd * @return * @throws Exception */ public static KeyManagerFactory initKeyManagerFactory(KeyStore ks, String keyPwd) throws Exception { KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());// Sunx509 keyManagerFactory.init(ks, keyPwd.toCharArray()); return keyManagerFactory; } /** * 初始化KeyStore. * * @param keyStorePath * 密钥库路径 * @param password * 密码 * @return 密钥库 * @throws Exception */ public static KeyStore initKeyStore(String password, String keyStorePath) throws Exception { // 实例化密钥库 JKS KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream is = new FileInputStream(keyStorePath); ks.load(is, password.toCharArray()); is.close(); return ks; } public static void main(String[] args) { HttpUtil t = new HttpUtil (); try { t.send(); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
在P4P问题中,当空间4个点共面时,不仅摄像机坐标系与物体坐标系之间 的旋转矩阵R和平移向量t可以线性求解,而且可以同时确定摄像机的有效焦距f和像素比例,该程序设计模拟已知相机矩阵M情况下由已知三维空间点和图像...
一个点在A坐标系下的坐标和在B坐标系下的坐标已知,求A坐标系下的另外一点在B坐标系下的坐标 输入:1.已知点在A坐标系下的坐标 2.已指点在B坐标系下的坐标 3.未知点在A坐标系下的坐标 输出:未知点在B坐标系下的...
已知路径下创建文件夹
rsa解密(已知nec).py
已知目标坐标系下两个已知点,调平全站仪,全站仪分别测量该两已知点,然后后方交会设站。获取全站仪在目标坐标系下的坐标以及全站仪指向任意点时的方位角。 注意:目标坐标系Z轴必须是垂直于水平面的,即与全站仪...
已知不同坐标系的多个坐标点的坐标,求两个坐标系的转换矩阵,是matlab写的程序,三维坐标的。 做机器人视觉导航时用到的这个转换。
已知二元一次方程ax²+bx+c=0(a≠0),编程实现求解方程的根。(分三种情况考虑) 欢迎大佬指教
已知经纬度计算角度,采用C#在VS2010底下调试无误,已知经纬度计算角度,采用C#在VS2010底下调试无误
matlab已知图像轮廓下,删除图像背景
Python爬虫伪装请求头User-Agent数据
VMware已知问题解决方法,版本5.5
基于无证书的认证密钥协商方案相比基于PKI的方案具有身份管理的简单性,同时相比基于身份的方案具有无密钥托管性。基于可证安全的无证书加密方案提出了一个两方认证密钥协商方案.通过与其他方案在安全性和有效性方面...
2018年秋八年级数学上册第13章全等三角形13.4尺规作图1作一条线段等于已知线段2作一个角等于已知角作业新版华东师大版
windows下制作和应用数字签名证书全套工具 Cert2Spc.exe CertMgr.Exe MakeCat.Exe makecert.exe pvk2pfx.exe sigcheck.exe signtool.exe 远程服务使用已使用加密弱散列算法(例如MD2,MD4,MD5或SHA1) 签名的SSL证书...
双容水箱前馈控制,实验课使用,内含已知前馈通道与未知两种情况下的控制结果
基于已知定位的构图的思路 方法
已知三列数据,用MATLAB画三维曲线图或者曲面图,很多初学者总是报错,甚至画不出来,这个代码通用性很强,如果数据本事没有残缺或者GUG,都可以用这个数据画三维曲面图,或者三维曲线图
rsa解密(已知p qe 求 d)python3.py
遍历已知父窗里子窗所有句柄 的实例
设两个已知点(A、B点 )经纬度为(α1,β1),(α2,β2),其距离为D,地球半径为R, 行距为H,第三点的经纬度为(α3,β3),向左时θ=3π/ 2,向右时θ=π/ 2 第三点:距离前述已知两点(A、B点)组成的直线...