Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2842729
  • 博文数量: 348
  • 博客积分: 2907
  • 博客等级: 中校
  • 技术积分: 2272
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 09:16
个人简介

专注 K8S研究

文章分类

全部博文(348)

文章存档

2019年(22)

2018年(57)

2016年(2)

2015年(27)

2014年(33)

2013年(190)

2011年(3)

2010年(14)

分类: 系统运维

2018-12-07 17:32:14

1.在工作中配到了需要nginx代理到https请求,并需要携带证书的请求,在测试的时候用的是直接调用地址没有代理。可以正常请求,httpclient(version: 4.5.3)请求带证书:


 1 URL url = this.getClass().getResource("/cd/weijianming")//获取证书,发送POST请求;里面是证书路径 2 KeyStore keyStore = KeyStore.getInstance("PKCS12");
 3 // 从配置文件里读取证书的路径信息,  
4 FileInputStream instream = new FileInputStream(url.getFile());  
5 // 证书密码  
6  keyStore.load(instream, "123dsfasdfsdsf");  
7  instream.close();  
8 SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, MCH_ID.toCharArray()).build();  
9 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.getDefaultHostnameVerifier()); 
10 CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();

此代码用来创建带证书的httpclient,创建完成之后就可以发送请求携带证书了。就可以用主方法测试了。


2.但是在布置代码到测试环境的时候,由于服务器限制,只能通过代理访问外网请求,代理之后发现证书带不过去,一直报错缺少证书,然后绕了一上午的弯路,终于下午找到解决方法。

  1)nginx 版本要是 1.7.1 之后,因为proxy_ssl_certificate这个命令之前的版本不支持。nginx 配置如下:


location /test/ {
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_redirect    off; 
     proxy_ssl_certificate       证书路径;
     proxy_ssl_certificate_key   key路径; 
     proxy_pass 外网地址;
     }

只需要替换文本里面的汉字即可实现配置。然后直接代理请求地址就可以访问了。需要注意的是此时代码里面就不用加载证书了。以上java代码可以替换为:

  CloseableHttpClient httpclient = HttpClients.createDefault();

只需要一行就行。

之所以记录下来,是因为自己碰到这个问题,有点茫然不知如何处理,所以觉得应该记录下来。这个配置是客户端请求携带证书。服务端配置不是这样。请注意!!


location  upstream test {
    server 192.168.1.50:8443;
 }
    server {
    listen 1443;
    server_name ycc.cnpdc.com;
    location /test/ {
    proxy_set_header Host caw.welcom.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect    off; 
    proxy_ssl_certificate       key/caw.welcom.com/clinet.pem;
    proxy_ssl_certificate_key key/caw.welcom.com/clinet.key; 
    proxy_pass 
  }
 } 

请求验证:
curl -v 
     



阅读(2576) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~