如何使用JSSE提供的API进行安全套接字编程

利用 Java 的 JSSE(Java Secure Socket Extension)技术,我们可以方便的编写安全套接字程序,关于 JSSE 的介绍,可以参阅 Oracle 网站提供的 JSSE 指导。程序编写过程中,我们需要将数字证书应用到代码中。通常在正式的产品开发中,我们可以支付一定的费用,向正规认证机构,例如:Verisign、Geotrust、Thawte 等申请。

如果只是为了实验,我们还可以使用 Java 自带的 keytool 工具来制作证书。keytool 是密钥和证书管理工具,生成的密钥或证书,存放在 jks(Java Key Store) 格式的文件里。从用途上来说,jks 格式的文件常用于:

1) 存储非对称密钥对以及数字证书的证书库;

2) 存储信任证书列表的信任库。

注意:不同版本的 Java 自带的 keytool 命令行参数可能会略有不同。相比于 Java6,在 Java7 中 keytool 工具有如下改动:

-export 选项改名为 -exportcert

-genkey 选项改名为 -genkeypair

-import 选项改名为 – importcert

-keyclone 选项被废弃

-">identitydb 选项被废弃

-selfcert 选项被废弃

下面将以 Java7 中的 keytool 为例,对常见的用法进行说明。

使用 keytool 制作证书库以及信任库

生成非对称密钥以及自签发证书

命令:keytool -genkeypair -alias TEST_ROOT -keystore test_root.jks

解释:生成一对密钥以及一个自签发证书,其中私钥和证书以别名 TEST_ROOT 存储在 test_root.jks 文件中。

注意:使用上述命令时,命令行会交互的需要手动填写密码、CN、OU 等信息。也可以直接在命令行指定这些参数,详情见 参考资料中列出的 keytool 使用帮助。

生成证书请求文件

命令:keytool -certreq -file test_server.csr -alias TEST_SERVER -keystore test_server.jks

解释:将别名为 TEST_SERVER 的公钥和一些个人信息从 test_server.jks 文件中导出,作为证书请求文件。

签发证书

命令:keytool -gencert -infile test_server.csr -outfile test_server.cer -alias TEST_ROOT -keystore TEST_ROOT.jks

解释:使用别名为 TEST_ROOT 的私钥为 test_server.csr 签发证书,并保存到 test_server.cer 文件中。

从 jks 文件中导出证书

命令:keytool -exportcert -alias TEST_ROOT -file test_root.cer -keystore test_root.jks

解释:从 test_root.jks 文件中导出别名为 TEST_ROOT 的证书并存放在 test_root.cer 文件中。

导入信任证书到 jks 文件

命令:keytool -importcert -alias TEST_ROOT -file test_root.cer -keystore TEST_SERVER.jks

解释:将证书 test_root.cer 以别名 TEST_ROOT 导入 TEST_SERVER.jks 中。

注意:这里的目标 jks 文件里不含有指定的别名,此时的导入条目才会以 trustedCertEntry 信任证书的形式保存。

导入签发证书到 jks 文件 ( 更新证书 )

命令:keytool -importcert -alias TEST_SERVER -file test_server.cer -keystore TEST_SERVER.jks

解释:将证书 test_server.cer 更新到已存在别名 TEST_SERVER 的 TEST_SERVER.jks 文件中

注意:这里的命令和上述导入信任证书的命令在形式上完全一样,但作用不同。

1. 这里的目标 jks 文件里要含有指定的别名,这样 keytool 工具才会理解命令为更新证书,并以 PrivateKeyEntry 的形式保存。

2. 在更新被签发证书之前,一定要先将相应的 CA 证书,导入进 jks 文件,否则会报错“keytool 错误 : java.lang.Exception: 无法从回复中建立链”。

打印证书内容

命令:keytool – printcert – v – file test_server.cer

解释:将证书 test_server.cer 的内容打印出来

注意:也可以使用 -sslserver ip:port 的参数,直接从网络上打印出某个 ssl server 提供的证书的内容,详情见 参考资料中列出的 keytool 使用帮助。

显示 jks 文件里的内容

命令:keytool – list – v – keystore test_server.jks

解释:显示 test_server.jks 里存储的所有条目

注意:这里会要求提供 jks 文件的密码,如果不输入,也可以显示出所有条目信息,但会提示“存储在密钥库中的信息的完整性尚未得到验证!”

从 jks 文件删除条目

命令:keytool -delete -alias TEST_ROOT -keystore test_server.jks

解释:从 test_server.jks 中删除别名为 TEST_ROOT 的条目

时间: 2024-10-07 10:21:09

如何使用JSSE提供的API进行安全套接字编程的相关文章

Java 安全套接字编程以及 keytool 使用最佳实践

概述 利用 Java 的 JSSE(Java Secure Socket Extension)技术,我们可以方便的编写安全套接字程序,关于 JSSE 的介绍,可以参阅 Oracle网站提供的 JSSE指导.程序编写过程中,我们需要将数字证书应用到代码中.通常在正式的产品开发中,我们可以支付一定的费用,向正规认证机构,例如:Verisign.Geotrust.Thawte等申请. 如果只是为了实验,我们还可以使用 Java 自带的 keytool 工具来制作证书.keytool 是密钥和证书管理工

返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作 [索引页][源码下载] 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

请问百度提供什么api可以实现link环境中《点餐软件》的餐厅选择页面?

问题描述 请问百度提供什么api可以实现link环境中<点餐软件>的餐厅选择页面? 请问百度提供什么api可以实现link环境中<点餐软件>的餐厅选择页面? 解决方案 百度没有提供类似的功能,恐怕还要你自己去实现.

为什么不大愿意调用国内厂商提供的API

郑昀  20100819 我平时喜欢玩Mashup,所以对国外各种开放接口都有兴趣看两眼.像Twitter的,Yahoo!的(Yahoo! Pipe.YQL),Google(Buzz.Google Reader.Chart.WebFinger等)的,即使是很不着调的Social Graph API,都能很快测试通过然后嵌到自己的所谓"智能语义聚合框架"里.但对于国内哪怕是所谓"开放平台"提供的API都会比较犯憷. (Updated:我没想一杆子打翻一船人.新浪开放平

使用JavaIO提供的API下载指定文件(image)

</pre><pre name="code" class="java"> 使用JavaIO提供的API下载指定文件(image) package com.net.download; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.Ma

利用百度地图提供的API,做到下面的目的;表示小白

问题描述 利用百度地图提供的API,做到下面的目的:表示小白 如图百度地图中,假如在我画的这个框的区域内我用鼠标点击一个位置,然后出现一个提示框,提示框内内容为我自定义的内容:能告诉我这个用百度API怎么做吗

百度提供网站API接口与贴吧共享用户资源

中介交易 SEO诊断 淘宝客 云主机 技术大厅 什么是网盟开放平台呢?根据百度贴吧官方的介绍可知,它是百度联手网媒和第三方开发者打造的一个全分享平台机制.通俗点讲,那就是开放百度贴吧的一些API,让大家可以在自己的网站上增加一个接口从而能方便用户快捷的分享网站上的优质内容到i贴吧里去.成功申请加入后,贴吧用户只需在合作网站的页面上点击"分享到i贴吧"按钮,然后添加一下自己的评论,该网页的内容和链接即可自动转贴到i贴吧. 学知网编辑近日发现,中文社区贴吧开始对外提供API接口,正式启动网

xcode-HealthKit中步数获取成功,但用框架提供的API转换的时候崩了

问题描述 HealthKit中步数获取成功,但用框架提供的API转换的时候崩了 已经取出了最近时间的步数,在Xcode上打印出来没问题,但在数据转换成可以在UI显示的时候崩了 (void)updateUsersFootLabel{HKQuantityType *footType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];[self.healthStore aapl_mostRece

api-用stackoverflow提供的API下载用户数据

问题描述 用stackoverflow提供的API下载用户数据 各路大神求帮忙!stackoverflow提供的API中,https://api.stackexchange.com/docs/users/,获取用户列表,过滤的参数表示什么意思?如 page,pagesize,fromdata.返回的数据中,日期是什么格式? 解决方案 page那个是分页.数据多的时候需要分页. 解决方案二: 日期就是字符串格式,比如 xx/xx/xxxx xx:xx:xx 你试下就知道了. reputation