我正在将商家与我们的应用程序集成在一起。商家向我们提供了JKS,KEY,PEM和P12文件以及证书密码。
在开发服务器中,集成与JKS证书和使用HttpsURLConnection实现的证书密码一起使用。
SSLContext sc = SSLContext.getInstance("TLSv1.2");
KeyManagerFactory kmf;
KeyStore ks;
char[] passphrase = keystore_password.toCharArray();
kmf = KeyManagerFactory.getInstance("SunX509");
ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystore_path), passphrase);
kmf.init(ks, passphrase);
sc.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) {
logger.warn("Warning: URL host ' " + urlHostName + " ' is different to SSLSession host ' "
+ urlHostName + " '");
}
return true;
}
};
@Override
public boolean verify(String urlHostName, SSLSession session) {
if (!urlHostName.equalsIgnoreCase(session.getPeerHost())) {
logger.warn("Warning: URL host ' " + urlHostName + " ' is different to SSLSession host ' "
+ urlHostName + " '");
}
return true;
}
};
在上层环境中,TOMCAT位于DMZ区域,仅通过nginx与外部世界进行交互。
tomcat请求Nginx服务器的标头中包含实际URL,nginx解析标头并将请求转发到URL并将响应呈现给tomcat。
问题
我如何通过Nginx将带有凭据的请求转发给商家?
答案 0 :(得分:0)
您不能“转发”它。要基于标头的内容处理HTTP请求,nginx必须解密传入的数据并重新加密传出的修改后的数据。由于像SSL / TLS这样的安全协议的全部要点是,除授权端点外,其他任何人都无法看到或更改数据,因此nginx必须终止客户端SSL / TLS会话本身并创建单独的服务器端SSL / TLS会话在其上转发HTTP级别的数据。
因此要向“商户”服务器进行身份验证,必须使用客户端证书(包括链证书(如果适用)并匹配私钥)对nginx进行配置,请参见http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_ssl_certificate等。
(如果您还没有,可以将 public class Game {
public String capitalanswer = "";
public String countryanswer = "";
private CountryDB db;
public Game(){
this.db = new CountryDB();
}
public String qa(){
List<String> countries = db.getCapitals();
int n = countries.size();
int index = (int)( n * Math.random());
String c = countries.get(index);
capitalanswer = c;
System.out.println(capitalanswer);
Map<String, Country> data = db.getData();
Country ref = data.get(c);
countryanswer = ref.toString();
System.out.println(countryanswer);
if (Math.random() < 0.5){
return "What country has the capital " + ref.getCapital() + " ?" + "\n" + ref.getName();
}else{
return "What is the capital of " + ref.getName() + " ?" + "\n" + ref.getCapital();
}
}
的JKS转换为PKCS12,而keytool -importkeystore
的PKCS12转换为PEM –这里和其他堆栈上都有大量现有的Q超级用户和服务器故障。)
从(真实)客户端到nginx的会话是否使用同一证书进行身份验证,使用其他证书还是完全不使用证书进行身份验证,取决于nginx的配置。