(转)使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

网友投稿 609 2022-11-11

(转)使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

(转)使用HttpClient发送HTTPS请求以及配置Tomcat支持SSL

package com.jadyer.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.org.apache.* 使用HttpClient模拟HTTPS访问 * @see =================================================================================================================================== * @see 【配置Tomcat支持SSL(即让Tomcat下的Web应用处于SSL安全通道中)】 * @see =================================================================================================================================== * @see 1、生成KeyStore * @see 1)运行-->CMD-->"keytool -genkey -alias Jadyer_SSL_20120508 -keyalg RSA -validity 1024 -keystore D:\Jadyer_SSL_20120508.keystore" * @see 参数说明----->-genkey 表示生成密钥 * @see -alias 指定别名,这里是Jadyer_SSL_20120508 * @see -keyalg 指定算法,这里是RSA * @see -validity 指定证书有效期,这里是1024天 * @see -keystore 指定存储位置,这里是D:\Jadyer_SSL_20120508.keystore * @see 2)CMD输出----->输入keystore密码:hongyu75 * @see 再次输入新密码:hongyu75 * @see 您的名字与姓氏是什么?[Unknown]:127.0.0.1(这里要根据实际情况填写网站域名或者IP,否则会出现证书上的名称无效) * @see 您的组织名称是什么?[Unknown]:JavaLover_jadyer * @see 您所在的城市或区域名称是什么?[Unknown]:BJ * @see 您所在的州或省份名称是什么?[Unknown]:BJ_NanTian * @see 该单位的两字母国家代码是什么[Unknown]:CN * @see CN=127.0.0.1, OU=, O=JavaLover_jadyer, L=BJ, ST=BJ_NanTian, C=CN 正确吗?[否]:Y * @see 输入的主密码(如果和 keystore 密码相同,按回车):这里按回车键 * @see (这里的主密码一定要与keystore密码相同,否则启动Tomcat时就会告诉你java.io.IOException: Cannot recover key) * @see 3)接下来就会按照-keystore参数值在指定位置生成指定的KeyStore文件了 * @see =================================================================================================================================== * @see 2、让Tomcat支持SSL * @see 1)将生成的Jadyer_SSL_20120508.keystore拷贝到\%TOMCAT_HOME%\conf\目录中(其它目录也可以) * @see 2)修改\%TOMCAT_HOME%\conf\server.xml文件(大约在85行的位置),新增内容如下 * @see * @see 3)这样,我们的Tomcat就支持HTTPS访问了(关于标签中的属性说明,参拜Google大神) * @see =================================================================================================================================== * @see 3、用浏览器访问我们的应用 * @see 1)输入* @see 此时,如果我们在浏览器里访问* @see 也就是说,我们虽然启用了HTTPS,但现在还可以绕开HTTPS直接访问HTTP还能,这样HTTPS也就起不到作用了 * @see 2)我们可以配置一下\%TOMCAT_HOME%\conf\web.xml文件,使得HTTP的访问能够重定向到HTTPS的连接 * @see 修改位置大约为web.xml的1224行,即在标签后面加入下面的内容,即可 * @see * @see * @see * @see SSL_App * @see * @see /* * @see <* @see <* @see * @see * @see * @see CONFIDENTIAL * @see * @see * @see =================================================================================================================================== * @editor Feb 1, 2012 3:02:27 PM */public class HttpClientUtil { public static void main(String[] args)throws Exception{ //String requestUrl = " String requestUrl = " System.out.println(sendSSLRequest(requestUrl)); } /** * 发送HTTPS请求 * @param requestUrl 请求的地址 * @return 响应内容 */ @SuppressWarnings("finally") public static String sendSSLRequest(String requestUrl){ long responseLength = 0; //响应长度 String responseContent = null; //响应内容 HttpClient = new DefaultHttpClient(); //创建默认的 try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); FileInputStream fis = new FileInputStream(new File("F:\Tool\IDE\Jadyer_SSL_20120508.keystore")); try { trustStore.load(fis, "hongyu75".toCharArray()); //加载KeyStore } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (CertificateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); //创建Socket工厂,将trustStore注入 Scheme sch = new Scheme("8443, socketFactory); //创建Scheme //注册Scheme HttpGet = new HttpGet(requestUrl); //创建HttpGet HttpResponse response = //执行GET请求 HttpEntity entity = response.getEntity(); //获取响应实体 if (null != entity) { responseLength = entity.getContentLength(); responseContent = EntityUtils.toString(entity, "UTF-8"); EntityUtils.consume(entity); //Consume response content } System.out.println("请求地址: " + System.out.println("响应状态: " + response.getStatusLine()); System.out.println("响应长度: " + responseLength); System.out.println("响应内容: " + responseContent); } catch (KeyManagementException e) { e.printStackTrace(); } catch (UnrecoverableKeyException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //关闭连接,释放资源 return responseContent; } }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SVN迁移到GitLab
下一篇:使用@CacheEvict 多参数如何匹配删除
相关文章

 发表评论

暂时没有评论,来抢沙发吧~