客户端如何使用httpclient向https服务器发送数据(
unable to find valid certification path to requested target
):
http://www.open-china.net/blog/73709.html
证书导入java:
keytool -import -noprompt -keystore cacerts -storepass changedit -alias xfcstorea -file server.crt
问题:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
解决方法:
发现是之前使用keytool导入证书的Subject属性(CN=)与访问站点的地址不一致。
这里Subject的cn要与访问的地址一致,即要使用域名不能使用IP访问。当然制作证书时也可以添加subject alternative names 。
资料参考:http://hi.baidu.com/songzongquan/blog/item/0fe32e668741522eab184ce4.html
资料&问题:
证书制作:
http://zhumeng8337797.blog.163.com/blog/static/10076891420104655332572/
数字证书制作:
1、创建根证书
makecert -n "CN=证书名称" -sv 私钥.pvk -b 开始时间 -e 截止时间 -a 算法 -l "你的与证书相关的网址" -r 公钥.cer
如:makecert -n "CN=木炭;O=激情燃烧的木炭" -sv root.pvk -b 01/01/2001 -e 12/31/2100 -a sha1 -l "http://www.woodcoal.cn/utils/search.html?wd=ca&click=1 " -r root.cer
2、创建二级证书
makecert -sv 二级证书私钥.pvk -iv 根证书私钥.pvk -ic 根证书公钥.cer -n "CN=二级证书名称" -b 开始时间 -e 截止时间 -a 算法 -l "你的与证书相关的网址" 二级证书公钥.cer
如:makecert -sv woodcoal.pvk -iv root.pvk -ic root.cer -n "CN=木炭测试;O=激情燃烧的木炭" -b 01/01/2001 -e 12/31/2100 -a sha1 -l "http://www.woodcoal.cn/utils/search.html?wd=ca&click=1 " woodcoal.cer
注意:
- 运行后提示输入密码,设置密码或留空均可。
- 制作二级证书时颁发者密码为根证书的密码。
- 根证书加入“受信任的根证书颁发机构”后,证书签名的程序或服务器才能显示完整的颁发者名称。
- 只有根证书加入“受信任的根证书颁发机构”时,二级证书才能显示完整,否则显示不能验证该证书。
使用说明:
证书创建工具生成仅用于测试目的的 X.509 证书。它创建用于数字签名的公钥和私钥对,并将其存储在证书文件中。此工具还将密钥对与指定发行者的名称相关联,并创建一个 X.509 证书,该证书将用户指定的名称绑定到密钥对的公共部分。
Makecert.exe 包含基本选项和扩展选项。基本选项是最常用于创建证书的选项。扩展选项提供更多的灵活性。
makecert [options] outputCertificateFile
outputCertificateFile :测试 X.509 证书要写入的 .cer 文件的名称。
基本选项
选项 | 说明 |
---|---|
-n x509name | 指定主题的证书名称。此名称必须符合 X.500 标准。最简单的方法是在双引号中指定此名称,并加上前缀 CN= ;例如,"CN=myName "。 |
-pe | 将所生成的私钥标记为可导出。这样可将私钥包括在证书中。 |
-sk keyname | 指定主题的密钥容器位置,该位置包含私钥。如果密钥容器不存在,系统将创建一个。 |
-sr location | 指定主题的证书存储位置。Location 可以是 currentuser (默认值)或localmachine 。 |
-ss store | 指定主题的证书存储名称,输出证书即存储在那里。 |
-# number | 指定一个介于 1 和 2,147,483,647 之间的序列号。默认值是由 Makecert.exe 生成的唯一值。 |
-$ authority | 指定证书的签名权限,必须设置为 commercial (对于商业软件 发行者使用的证书)或 individual (对于个人软件 发行者使用的证书)。 |
-? | 显示此工具的命令语法和基本选项列表。 |
-! | 显示此工具的命令语法和扩展选项列表。 |
扩展选项
选项 | 说明 |
---|---|
-a algorithm | 指定签名算法。必须是 md5 (默认值)或 sha1 。 |
-b mm/dd/yyyy | 指定有效期的开始时间。默认为证书的创建日期。 |
-cy certType | 指定证书类型。有效值是 end (对于最终实体)和 authority (对于证书颁发机构)。 |
-d name | 显示主题的名称。 |
-e mm/dd/yyyy | 指定有效期的结束时间。默认为 12/31/2039 11:59:59 GMT。 |
-eku oid [,oid ] | 将用逗号分隔的增强型密钥用法对象标识符 (OID) 列表插入到证书中。 |
-h number | 指定此证书下面的树的最大高度。 |
-ic file | 指定颁发者的证书文件。 |
-ik keyName | 指定颁发者的密钥容器名称。 |
-iky keytype | 指定颁发者的密钥类型,必须是 signature 、exchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。 |
-in name | 指定颁发者的证书公用名称。 |
-ip provider | 指定颁发者的 CryptoAPI 提供程序名称。 |
-ir location | 指定颁发者的证书存储位置。Location 可以是 currentuser (默认值)或 localmachine 。 |
-is store | 指定颁发者的证书存储名称。 |
-iv pvkFile | 指定颁发者的 .pvk 私钥文件。 |
-iy pvkFile | 指定颁发者的 CryptoAPI 提供程序类型。 |
-l link | 到策略信息的链接(例如,一个 URL)。 |
-m number | 以月为单位指定证书有效期的持续时间。 |
-nscp | 包括 Netscape 客户端身份验证扩展。 |
-r | 创建自签署证书。 |
-sc file | 指定主题的证书文件。 |
-sky keytype | 指定主题的密钥类型,必须是 signature 、exchange 或一个表示提供程序类型的整数。默认情况下,可传入 1 表示交换密钥,传入 2 表示签名密钥。 |
-sp provider | 指定主题的 CryptoAPI 提供程序名称。 |
-sv pvkFile | 指定主题的 .pvk 私钥文件。如果该文件不存在,系统将创建一个。 |
-sy type | 指定主题的 CryptoAPI 提供程序类型。 |
数字证书中主题(Subject)中字段的含义
一般的数字证书产品的主题通常含有如下字段:
- 公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端证书则为证书申请者的姓名;
- 单位名称 (Organization Name) :简称:O 字段,对于 SSL 证书,一般为网站域名;而对于代码签名证书则为申请单位名称;而对于客户端单位证书则为证书申请者所在单位名称;
- 证书申请单位所在地:
- 所在城市 (Locality) 简称:L 字段
- 所在省份 (State/Provice) 简称:S 字段
- 所在国家 (Country) 简称:C 字段,只能是国家字母缩写,如中国:CN
其他 一些字段:
- 电子邮件 (Email) 简称:E 字段
- 多个姓名字段 简称:G 字段
- 介绍:Description 字段
- 电话号码:Phone 字段,格式要求 + 国家区号 城市区号 电话号码,如: +86 732 88888888
- 地址:STREET 字段
- 邮政编码:PostalCode 字段
- 显示其他 内容 简称:OU 字段