java证书及通过httpClient实现访问

原创 2013年12月06日 10:44:34

制作证书

最近有一个需求,SOLR可以通过请求直接访问,这样不安全,当然http://wiki.apache.org/solr/SolrSecurity官方有很多实现方法,本文通过java的证书实现。

无论是windows还是Linux系统,需要安装JDK(建议1.7版本)

1、生成服务器证书库

keytool-validity 365 -genkey -v -alias server -keyalgRSA -keystore E:\ssl\174\server.keystore -dname"CN=192.168.100.174,OU=tass,O=tass,L=nanjin,ST=jiangsu,c=cn"-storepass tass2013 -keypass tass2013

注:CN:要设定的域名或IP

 

2、生成客户端证书库

 keytool -validity 365 -genkeypair -v -aliasclient -keyalg RSA -storetype PKCS12 -keystore E:\ssl\174\client.p12 -dname"CN=client,OU=tass,O=tass,L=nanjin,ST=Beijing,c=cn" -storepass tass2013-keypass tass2013

 

3、从客户端证书库中导出客户端证书

 keytool -export -v -alias client -keystoreE:\ssl\174\client.p12 -storetype PKCS12 -storepass tass2013 -rfc -file E:\ssl\174\client.cer

 

4、从服务器证书库中导出服务器证书

 keytool -export -v -alias server -keystoreE:\ssl\174\server.keystore -storepass tass2013 -rfc -file E:\ssl\174\server.cer

 

5、生成客户端信任证书库(由服务端证书生成的证书库)

 keytool -import -v -alias server -file E:\ssl\174\server.cer-keystore E:\ssl\174\client.truststore -storepass tass2013

 是

6、将客户端证书导入到服务器证书库(使得服务器信任客户端证书)

 keytool -import -v -alias client -file E:\ssl\174\client.cer-keystore E:\ssl\174\server.keystore -storepass tass2013

 

 查看证书状态:

 keytool -list -keystoreE:\ssl\server.keystore -storepass 123456


 

修改tomcat配置文件server.xml

将生成的server.keystore服务端证书拷贝到服务器目录:

/opt/smc/apache-tomcat-7.0.40-key/ssl/server.keystore

 

<Connector port="8443"

protocol="org.apache.coyote.http11.Http11NioProtocol"

clientAuth="true"

sslProtocol="TLS"

keystoreFile="/opt/smc/apache-tomcat-7.0.40-key/ssl/server.keystore"

keystorePass="123456"

truststoreFile="/opt/smc/apache-tomcat-7.0.40-key/ssl/server.keystore"

truststorePass="123456"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"  />

 

注:如果设置了clientAuthtrue,则需要客户端证书验证,否则访问不了。

客户端导入证书访问

双击客户端证书client.p12点击下一步输入密码即可导入IE浏览器即可实现访问。

Chrome和FireFox需要手工导入才能访问。

 

Chrome实现:

设置 → 显示高级设置... → 管理证书... → 个人 → 选择证书 → 确定

 

FireFox实现:

工具 → 选项 → 高级 → 证书 → 查看证书 → 导入 → 选择证书 → 确定

通过程序控制访问

solrj程序通过httpClient代理实现证书的安全访问。

示例代码:

public class DoubleSSL {
    private String    httpUrl = "https://192.168.100.175:8443/solr";
    // 客户端密钥库
    private String    sslKeyStorePath          = "E:/ssl/server.keystore";
    private String    sslKeyStorePassword      = "123456";
    // 客户端信任的证书
    private String    sslTrustStore        = "E:/ssl/server.keystore";
    private String    sslTrustStorePassword    = "123456";
    public HttpClient testHttpsClient() {
       SSLContext sslContext = null;
       HttpClient httpClient = null;
       try {
           KeyStore kstore = KeyStore.getInstance("JKS");
           kstore.load(new FileInputStream(sslKeyStorePath), sslKeyStorePassword.toCharArray());
           KeyManagerFactory keyFactory =KeyManagerFactory.getInstance("sunx509");
           keyFactory.init(kstore, sslKeyStorePassword.toCharArray());
           KeyStore tstore = KeyStore.getInstance("jks");
           tstore.load(new FileInputStream(sslTrustStore), sslTrustStorePassword.toCharArray());
           TrustManager[] tm;
           TrustManagerFactory tmf =TrustManagerFactory.getInstance("sunx509");
           tmf.init(tstore);
           tm = tmf.getTrustManagers();
           sslContext = SSLContext.getInstance("SSL");
           sslContext.init(keyFactory.getKeyManagers(),tm, null);
       } catch (Exceptione) {
           e.printStackTrace();
       }
       try {
           httpClient = new DefaultHttpClient();
           SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext);
           Scheme sch = new Scheme("https", 8443, socketFactory);
    httpClient.getConnectionManager().getSchemeRegistry().register(sch);
           HttpGet httpGet = new HttpGet(httpUrl);
           HttpResponse response =httpClient.execute(httpGet);
    System.out.println(response.getStatusLine().getStatusCode());
       } catch (Exceptione) {
           e.printStackTrace();
       }
       return httpClient;
    }
}


 

相关文章推荐

httpclient调用Https,加载自签名证书

import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.secu...

java https post (带证书的)

Java 发送https 的post请求方法 2014-08-27 17:45 14207人阅读 评论(1) 收藏 举报 分类: 博文心得(39) 版权声明:本文为博主原创文章...

HttpClient如何访问需要提交客户端证书的SSL服务

1.1 问题背景 自从***一期工程上了CA认证网关之后,在访问受CA认证网关保护的应用子系统时,必须提交客户端证书。那么问题来了,如果是人工(通过IE浏览器)访问子系统自然没问题,访问时会提示选择...
  • wanglha
  • wanglha
  • 2015年10月20日 09:05
  • 4532

使用httpclient实现http接口调用实例

使用httpclient实现http接口调用实例 假设服务接口如下: 接口地址: http://192.168.0.1/service/sendsms 请求方式: post 需要传递参数:...
  • 5iasp
  • 5iasp
  • 2013年03月05日 17:03
  • 65068

java发https请求,证书配置

配证书:Getting   Tomcat   SSL   (https)   Working 1.Create   a   certificate   keystore   containing   ...

轻松把玩HttpClient之配置ssl,采用绕过证书验证实现https

上篇文章说道httpclient不能直接访问https的资源,这次就来模拟一下环境,然后配置https测试一下。在前面的文章中,分享了一篇自己生成并在tomcat中配置ssl的文章《Tomcat配置S...

基于Java代码实现证书生成

前阵子学习了Apache的openssl生成签名证书,通过一个简单的Web项目实现的,框架使用的是: struts2+spring+hibernate maven工程 1.      包结构: 2....
  • JY_He
  • JY_He
  • 2016年07月26日 17:22
  • 2594

Java制作证书工具keytool的总结

Java制作证书工具keytool的总结Keytool是Java自带的一个密钥和证书管理工具。借助这一工具,用户能够管理自己的公钥/私钥对及相关证书,用于自我认证或者数据完整性及加密访问服务。它的位置...

java httpclient basic授权

private static void test2() throws Exception { CloseableHttpClient httpclient = HttpClients.create...

JAVA利用HttpClient进行POST请求(HTTPS)

目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目用JQuery post进行请求。 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java证书及通过httpClient实现访问
举报原因:
原因补充:

(最多只允许输入30个字)