日期:2014-05-16  浏览次数:20420 次

使用JSONP完成HTTPS跨域请求
使用JSONP完成HTTPS跨域请求
前提条件
1. 已配置本机java环境
2. 已安装tomcat6.0

第一步   使用HTTPS协议前期准备
进入命令提示符窗口(cmd) 输入以下命令
1. 为服务器生成安全证书   
命令:
Keytool -genkey -v -alias tomcat -keyalg  RSA  -keystore server.keystore
输入新密码:123456
您的名字与姓氏是什么?
  [Unknown]:这里填写服务器所在的域名(如:www.baidu.com 本机为localhost)
您的组织单位名称是什么?
[Unknown]:  ysb
您的组织名称是什么?
[Unknown]:  portal
您所在的城市或区域名称是什么?
[Unknown]:  nj
您所在的州或省份名称是什么?
[Unknown]:  js
该单位的两字母国家代码是什么
[Unknown]:  en
N=localhost, OU=ysb, O=portal, L=js, ST=nj, C=en 正确吗?
  [否]:如果跟你填写的信息一致  则输入 “Y“ 反之则为“N”。

说明: tomcat:别名
RSA:使用的加密方式
server.keystore:生成的服务器证书名(必须以’.keystore’为后缀名)

注意:这样服务器证书就生成了如果使用单向认证,那么下面生成客户端证书的步骤就不用了。如果使用单向认证下面2,3,4步就不用了。

2. 为客户端生成安全证书     
命令:
Keytool -genkey -v -alias mykey  -keyalg RSA  -storetype PKCS12 -keystore client.p12
输入keystore密码:设置密码 如:123456
再次输入新密码:123456
您的名字与姓氏是什么?
  [Unknown]:  localhost
您的组织单位名称是什么?
  [Unknown]:  ysb
您的组织名称是什么?
  [Unknown]:  ysb
您所在的城市或区域名称是什么?
  [Unknown]:  nj
您所在的州或省份名称是什么?
  [Unknown]:  js
该单位的两字母国家代码是什么
  [Unknown]:  en
CN=localhost, OU=ysb, O=ysb, L=nj, ST=js, C=en 正确吗?
  [否]:如果跟你填写的信息一致  则输入 “Y“ 反之则为“N”。

说明:mykey:别名
PKCS12:以PKCS121格式生成文件
client.p12:生成的客户端证书文件
localhost:这里填本地IP或者localhost

3. 将证书导出到证书文件。
命令:
Keytool -export -v -alias mykey -keystore client.p12 -storetype PKCS12 -storepass password -rfc -file client.cer

说明: password:为客户端生成证书的证书密码。
client.cer:导出后缀名为‘.cer’的证书文件(方便将客户端证书导入到服务器添加信任)

4. 通过以上命令,客户端证书就被我们导出到“client.cer”文件了。下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:
Keytool import -v -file client.cer -keystore server.keystore
输入keystore密码:客户端证书密码
再次输入新密码:重复
所有者:CN=localhost, OU=ysb, O=ysb, L=nj, ST=js, C=en
签发人:CN=localhost, OU=ysb, O=ysb, L=nj, ST=js, C=en
序列号:4d9d7980
有效期: Thu Apr 07 16:44:48 CST 2011 至Wed Jul 06 16:44:48 CST 2011
证书指纹:
        MD5:72:2D:DD:20:2A:CA:3B:D0:E8:E3:5E:BF:90:FE:D0:83
        SHA1:77:9E:35:98:83:C8:F4:64:7E:ED:A2:91:C7:4A:27:0A:C0:18:BE:4D
        签名算法名称:SHA1withRSA
        版本: 3
信任这个认证? [否]:  y
认证已添加至keystore中
正在存储 server.keystore]

说明:
client.cer:导出后缀名为‘.cer’的证书文件(方便将客户端证书导入到服务器添加信任)
client.cer:转换后的客户端证书文件
server.keystore:服务器证书文件

注意:如果是单向认证则只需生成服务器证书即可

5. 打开Tomcat根目录下的/conf/server.xml,找到如下配置段
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
/>

注意:属性clientAuth的属性值 如果是双向认证则为true如果是单向认证则我false 默认为false

添加属性
  单向认证:
      keystoreFile="tomcat.keystore" keystorePass="password"
      双向认证:
keystoreFile="tomcat.keystore" keystorePass="password"
  truststoreFile="tomcat.keystore" truststorePass="password"

注意:双向认证双击client.p12文件按提示将证书导入浏览器

完成以上步骤就可以使用HTTPS协议了
测试:将访问项目的地址的协议手动改成HTTPS,端口改成8443。

说明:8443:在tomcat里https默认端口是8443( 可以自己修改)
  tomcat.keystore:生成的服务器证书存放路径
  password:为服务器证书的密码

第二步   使用JSONP完成跨域访问

使用Jquery的jQuery.getJSON(url, [data], [callback])函数发送跨域请求

例:
使用http协议时 请求为:
$.post("http://localhost:8080/rcs/userAction!login.action",{account:cfg.account,password:cfg.password},cf