nginx 正向代理 配置https 双向认证
项目中需要使用代理访问目标服务器,服务方只接受https请求,并且使用双向认证 经历了一番波折总算配置成功
现在讲配置过程记录下来。
首先是nginx 配置问题
查阅官方文档
http://nginxorg/en/docs/http/ngx_http_proxy_modulehtml
以下两项配置https 客户端认证私钥与证书
proxy_ssl_certificate
proxy_ssl_certificate_key
以下项目配置代理转发地址
proxy_pass https://127001:8443$request_uri;
配置文件
其中有一个坑在与配置代理转发地址时,如果不添加https:// 客户端请求的时候会报错,所以这里一定要写上。
上面这些都配置好后,代理就能正常使用了。
此外,证书问题可能有些人还会遇到问题,推荐的解决方案是在linux 下使用keytool+opensll 来进行证书转换,openssl需可能需要单独安装,具体方式可以问度娘。
以下提供从jks中获取pem格式证书和私钥的方法:
1、提取公钥:
切换到jks证书的存储路径,执行如下命令:keytool -list -rfc -keystore demojks -storepass demopwd
将证书内容完整复制,粘贴到文件中,保存为cerpem
2、提取私钥
私钥无法直接提取,需要将jks进行转换
1)keytool -importkeystore -srckeystore demjks -destkeystore demop12 -srcstoretype jks -deststoretype pkcs12
2)openssl pkcs12 -nodes -in 10411004511201290p12 -out demopem
vim demopem
将-----BEGIN PRIVATE KEY----- ……-----END PRIVATE KEY----- 之间内容(包含) 进行复制,粘贴到新文件中,保存名称为privateKeypem
或者可以直接执行第二个提取私钥操作 执行vim demopem 后可以看到证书和私钥,分别保存成两个pem文件即可。
代理服务器分好几种, 常见的( 网页代理服务器,共享代理服务器)
网页代理服务器:
一:打开IE浏览器→“工具”,点击“Internet 选项”。在对话框下,点击“连接”选项卡,然后点击“局域网设置”按钮 在弹出的“局域网(LAN)设置”对话框下,选中“为 LAN 使用代理服务器”的复选框。然后点击“高级”按钮 在弹出的“代理服务器设置”对话框下,设置不同类型的代理服务器(如 HTTP、HTTPS 或 FTP)。然后输入“要使用的代理服务器地址”,点击“确定”按钮即可。
共享代理服务器:
双网卡主机(服务器)在上网名称处右键点属性设置共享(共享时选择的是非连上网的网卡),然后点共享选项卡,并在允许其他网络用户通过此计算机的Internet连接来连接前打钩。选择本地连接作为Internet连接共享的设备。如果此时有错误,能共享时,查看防火墙并开启,择控制面板-管理工具-双击服务,打开windows firewall,让其启动,自动启动即可。
java设置代理
package compathtest;
import javaioBufferedInputStream;
import javaioBufferedOutputStream;
import javaioFileOutputStream;
import javanetURL;
import javanetURLConnection;
public class TURLConnection {
public static void main(String args[]) throws Exception
{
//设置代理上外网
SystemgetProperties()put("proxySet", "true");
SystemgetProperties()put("proxyHost", "1723117014");
SystemgetProperties()put("proxyPort", "8080");
/
如果需要验证用户
//AuthenticatorsetDefault(new MyAuthenticator());
/
URL url=new URL("http://wwwcsdnnet");
URLConnection urlCon=urlopenConnection();
/
方法1,一次过读取所有信息
/
BufferedInputStream bis=new BufferedInputStream(urlCongetInputStream());
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:aahtm"));
byte b[]=new byte[bisavailable()];
bisread(b);
boswrite(b);
bosflush();
bisclose();
bosclose();
/
方法2,一个个字节地读取
/
// InputStream is=urlCongetInputStream();
// FileOutputStream fos=new FileOutputStream("C:bbhtm");
// int tmp=0;
// while((tmp=isread())!=-1)
// {
// foswrite(tmp);
// }
// fosflush();
// fosclose();
// isclose();
}
}
package compathtest;
import javanetAuthenticator;
import javanetPasswordAuthentication;
public class MyAuthenticator extends Authenticator {
private String name ;
private String password;
public MyAuthenticator() {
super();
// TODO Auto-generated constructor stub
}
public MyAuthenticator(String name, String password) {
super();
// TODO Auto-generated constructor stub
thisname = name;
thispassword = password;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(thisgetName(),thisgetPassword()toCharArray());
}
}
0条评论