原文地址:
http://www.cnblogs.com/wupher/archive/2012/08/05/2623561.html
https://www.cnblogs.com/langtianya/p/3334493.html
在浏览器中访问https是件挺方便的事,与访问http站点相比,也就是地址栏上多个“s”。但是,在java平台上访问https,可就麻烦多了。Java虚拟机并不直接使用操作系统的key ring,而是有自己的security manager。与操作系统类似,jdk的security manager默认有一堆的根证书信任。如果你的https站点证书是花钱申请的,被这些根证书所信任,那使用java来访问此https站点会非常方便。但假如,你的https证书是自己签名的,就需要将证书导入至JDK的信任证书中,否则访问时会报SSL错误。假如,你的webserice是基于https来进行访问,而此站点证书是自签名类型的,那么部署时一定要使用keytool进行证书导入,否则无法正常访问。
JDK keystore存放路径
默认在 $JAVA_HOME/jre/lib/security/cacerts 在我的Mountaion Lion中,存放路径为:
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts
keystore的默认密码
“changeit”
有人说OS X中java的 Keystore密码被更改成了: “changeme”。所以如果你用上面那个访问失败,可以试试这个。
keytool乱码
keytool在OS X中经常显示为乱码,它在中文OS X中输出GB2312编码,所以要将terminal的默认编码更改成GB2312或者中文(ECU)。
导入证书
-
首先,先通过浏览器将证书下载下来,点击显示证书详细的时候,直接将图标拖动到桌面上即可。
-
-
通过keytool命令来导入证书,注意导入时需要管理员权限,所以命令前面要加sudo。不知道这个在win7系统上是不是也要如此。
-
-
最后通过keytool list显示信任的证书,通过MD5值验证一下证书是否导入成功。
-
最后: KeyTool命令详解
又及:
证书的cn(常用名称)需要和访问地址相一致,不然,仍然可能报错。所以,往往需要根据cn名称在hosts文件中为访问的ip地址添加域名解析。以gmail的证书为例:
再及:
XMLRpc上介绍了一种方法,通过自定义一个TrustManager来对所有的站点都进行信任来实现调用自签名的https webService。我试了半天不知为何没有成功。
一、首先要在浏览器打开需要证书的网站,然后把证书下载下来,保存的证书名称随意命名,只要保证唯一性(这个唯一性下文有解释)
二、然后把证书复制到%JAVA_HOME%/jre/bin/路径下,即保证证书与keytool.exe文件同目录(其实不同也行,但是执行命令时需要指定路径)
三、导入过程如下:
复制完成之后打开doc窗口:运行-cmd
keytool -import -v -trustcacerts -alias taobao -file taobao.cer -storepass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts
解释说明:
1、taobao 是可以自己修改的名称, taobao.cer 是导出的证书,同样,这里的证书名字也是随便取的,但前提是保证将C:\Program Files\Java\jdk1.6.0_24\jre\lib\security目录的cacerts文件内之前没有导入同名证书,就是要保证你将要导入的证书名称唯一性。
2、changeit 是密码, java默认的。
3、keytool是jdk中bin目录的一个exe文件,是jdk默认自带的,在我电脑的目录是:C:\Program Files\Java\jdk1.6.0_24\jre\bin\keytool.exe
4、%JAVA_HOME%/jre/lib/security/cacerts 这个路径中%JAVA_HOME%/jre/lib/security/是路径,cacerts是文件(即将要把证书导入到其中的文件)。当然要确保你已经配置过java_home环境变量,我的java_home环境变量为:C:\Program Files\Java\jdk1.6.0_24
5、其他保持不变。
6、如果提示:"是否信任此证书? [否]:" ,那么请输入"y"。
当出现:”证书已添加到密钥库中 [正在存储cacerts]“的时候,那么恭喜你已经添加成功。
注意:如果提示找不到指定文件,那么有可能是路径错了,我这里是先执行cd C:\Program Files\Java\jdk1.6.0_24\jre\bin\ 来到keytool文所在目录执行以上命令。
以后更新时,先删除原来的证书,然后导入新的证书 。
下面是一些常用命令:
//查看cacerts中的证书列表:
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
//删除cacerts中指定名称的证书:
keytool -delete -alias taobao -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
//导入指定证书到cacerts:
keytool -import -alias taobao -file taobao.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit-trustcacerts