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)的方法的更多相关文章

  1. 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 ...

  2. 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 ...

  3. java中的getProperty()方法。获取系统中属性名为key的属性对应的值

    总结:getProperty方法:获取系统中属性名为key的属性对应的值,系统中常见的属性名以及属性如下: 现在用getProperty()的方法,获取系统信息代码: package com.aaa; ...

  4. 【Java必修课】通过Value获取Map中的键值Key的四种方法

    1 简介 我们都知道Map是存放键值对<Key,Value>的容器,知道了Key值,使用方法Map.get(key)能快速获取Value值.然而,有的时候我们需要反过来获取,知道Value ...

  5. Android Studio 打包签名发布New Key Store

    Key store path:存放路径 Key Alias:别名 Validity(years):有效期 Certificate:证书 First and Last Name: Organizatio ...

  6. redis 在 php 中的应用(key篇)

    本文为我阅读了 redis参考手册 之后结合 博友的博客 编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: KEY(键) DEL           ...

  7. 启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not found这个日志

    今天在做一个dubbo服务端的时候,启动成功,dubbo也注册成功,但是启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not fou ...

  8. 如何生成Java Key以及sign一个jar

    1. 生成Java Key: keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize mydomain ...

  9. Java中数组操作 java.util.Arrays 类常用方法的使用

    任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的. Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的 ...

随机推荐

  1. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十一)定制一个arvo格式文件发送到kafka的topic,通过Structured Streaming读取kafka的数据

    将arvo格式数据发送到kafka的topic 第一步:定制avro schema: { "type": "record", "name": ...

  2. Github上Stars最多的53个深度学习项目,TensorFlow遥遥领先

    原文:https://github.com/aymericdamien/TopDeepLearning 项目名称 Stars 项目介绍 TensorFlow 29622 使用数据流图计算可扩展机器学习 ...

  3. 如何屏蔽ctrl + v 粘贴事件,鼠标右键粘贴事件

    通常在自己的APP里的密码框,验证码框需要屏蔽复制,粘贴,怎么办呢? 有三种方法: 1 hook 此方法是最完全的,但由于hook是全局的,容易影响到其它代码. 2 子类化文本框, 重写OnPaste ...

  4. 强大的Mockito测试框架

    转载:https://blog.csdn.net/dc_726/article/details/8568537 1自动生成Mock类   在需要Mock的属性上标记@Mock注解,然后@RunWith ...

  5. 【Python】使用geopy由地址找经纬度等信息

    代码: from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.geocode(&qu ...

  6. 使用CocoaPods来做iOS程序的包依赖管理

    前言 每种语言发展到一个阶段,就会出现相应的依赖管理工具, 或者是中央代码仓库.比如 Java: maven,Ivy Ruby: gems Python: pip, easy_install Node ...

  7. performSelector 多个参数

    [self performSelector:@selector(callFooWithArray) withObject:[NSArray arrayWithObjects:@"first& ...

  8. css背景全屏-视差

    <!DOCTYPE html> <html> <head> <title></title> <style> *{margin:0 ...

  9. 分布式系统介绍-PNUTS

    PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作.它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上.一个表单元控制器根 ...

  10. UBUNTU 字符界面来回切换

    图形界面切换到字符界面: 实体机:Ctrl + Alt + F1 VMware虚拟机:按下ALT+CTRL+SPACE(空格),ALT+CTRL不松开,再按F1.这样就可以切换到字符界面 字符界面切换 ...