PHP中使用 JKS(Java Key Store)的方法
PHP语言无法直接读取 JKS中的密钥,需要通过以下方法进行转换
本例以JKS中的私钥为例
首先 使用 KeyStore Explorer工具,打开JKS文件 ,此时可能需要输入 JKS密码
对私钥进行导出 Export Private Key, 此时可能 需要输入 密钥密码
导出 为 PKCS#8 格式, 此时需要输入两次 密钥密码 ( 一定要输入)
然后 到命令行 ,使用openssl 再次转换
openssl rsa -in prv.pkcs8 -out prv.pem
此时,此文件即可由PHP使用
常规情况下创建Web请求,并获取请求数据的代码如下:
WebRequest req = WebRequest.Create(url);
req.Timeout = 15000;
WebResponse result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
如果需要在代码中加入证书,则需要使用HttpWebRequest对象进行请求,代码如下:
//添加验证证书的回调方法
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(strQueryURL);
X509Certificate cerCaiShang = new X509Certificate(System.Web.HttpContext.Current.Server.MapPath(setting.PfxFile), setting.key);
httpRequest.ClientCertificates.Add(cerCaiShang);
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream receiveStream = httpResponse.GetResponseStream();
// 回调方法
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
return true;
return false;
}
本来这就算是完成了,但总是失败,原因未知,与万恶的Windows有关,还需要将客户端的证书+私钥(pfx 或p12 文件),导入到操作系统(windows)的相关证书区域,步骤:
Windows xp/2003
1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。
2. 在 文件 菜单上单击 添加/删除管理单元 。
3. 在 添加/删除管理单元 对话框中,单击 添加 。
4. 在 添加独立管理单元 对话框单击 证书 ,然后单击 添加 。
5. 在在 证书管理单元中 对话框中单击 计算机帐户 ,然后单击 下一步
6. 在 选择计算机 对话框中,单击 完成 。
7. 在 添加独立管理单元 对话框单击 关闭 ,然后单击 确定 。
8. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。
9. 右键 -》 所有任务-》导入 选择你的证书导入
Windows 7
1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。
2. 在 文件 菜单上单击 添加/删除管理单元 。
3. 在 可用的管理单元 列表中选择 证书 ,点击 添加 。
4. 在 证书管理 对话框中选择 计算机账户 ,然后单击 下一步
5. 在 选择计算机 对话框中,单击 完成 。
6. 在 添加或删除管理单元 对话框单击 确定 。
7. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。
8. 右键 -》 所有任务-》导入 选择你的证书导入
再次测试,就可以使用了。
参考:http://blog.wsdd.org/?p=510
$prvKey=openssl_pkey_get_private(file_get_contents("prv.pem"));
使用此私钥进行签名
//进行签名
$signature = '';
openssl_sign($data, $signature, $prvKey, 'SHA256'); //返回 签名
return $signature;
PHP中使用 JKS(Java Key Store)的方法的更多相关文章
- Converting a .jks Key Store to a .pem Key Store
In order to convert a Java key store into a Privacy Enhanced Mail Certificate, you will need to use ...
- Jmeter常见报错信息: ERROR - jmeter.protocol.http.proxy.ProxyControl: Could not initialise key store java.io.IOException: Cannot run program "keytool"
JMeter 2.10 用的新方法来录制HTTPS请求Java 7. 录制的过程中会碰到一些问题或者报错,就目前碰到的,做出一些总结. ERROR - jmeter.protocol.http.pro ...
- java中的getProperty()方法。获取系统中属性名为key的属性对应的值
总结:getProperty方法:获取系统中属性名为key的属性对应的值,系统中常见的属性名以及属性如下: 现在用getProperty()的方法,获取系统信息代码: package com.aaa; ...
- 【Java必修课】通过Value获取Map中的键值Key的四种方法
1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...
- Android Studio 打包签名发布New Key Store
Key store path:存放路径 Key Alias:别名 Validity(years):有效期 Certificate:证书 First and Last Name: Organizatio ...
- redis 在 php 中的应用(key篇)
本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL ...
- 启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not found这个日志
今天在做一个dubbo服务端的时候,启动成功,dubbo也注册成功,但是启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not fou ...
- 如何生成Java Key以及sign一个jar
1. 生成Java Key: keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize mydomain ...
- Java中数组操作 java.util.Arrays 类常用方法的使用
任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的. Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的 ...
随机推荐
- jQuery对象
$(document).ready(function(){ //第二种获取方法,通过标签的名<h2>Dom来获取 var h1 = document.getElementsByTagNam ...
- Spatis service单元测试: 使用mock mapper的方式
转载:https://blog.csdn.net/atec2000/article/details/54346242 @RunWith(MockitoJUnitRunner.class)public ...
- 【Python】由host得到IP
代码: import socket host='www.163.com' ip=socket.gethostbyname(host) print('Ip of {} is {}'.format(hos ...
- android中使用SharedPreferences存储数据
使用SharedPreferences存储数据还是比较简单的 1.添加或修改数据(没有数据就添加,有数据就是修改): SharedPreferences.Editor editor = getShar ...
- xpress for node 路由route几种实现方式
路由实现方式和顺序第二种路由写法第三种路由写法最佳 http://blog.csdn.net/mociml/article/details/11137571# http://blog.fens.me/ ...
- javascript中IE浏览器不支持NEW DATE()带参数的解决方法
代码如下: var date1=new Date(dateTimes[z][1]); 在火狐下 可以正常取得时间,在IE7下 却是 NaN.纠结老长时间,放弃了new date 然后再老外的论坛中找了 ...
- Linux中使用sed命令或awk命令修改常规配置文件
一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...
- __builtin_constant_p
int __builtin_constant_p (exp); You can use the built-in function __builtin_constant_p to determine ...
- JdbcTemplate应用学习
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
- css改变hr颜色
html中用css改变颜色,<hr style="border:0;height:1px;">如果不加border:0;的话,虽然颜色改变了,但是会显示一条黑色的边框. ...