由于gateway可以对标nginx,所以在生产环境可能需要使用https,以前的做法是使用nginx来配置ssl证书,现在需要把证书放到gateway里边。
由于gateway依赖springboot,所以直接使用springboot的配置就可以,具体配置如下:
server:
port: 8089
ssl:
key-store: classpath:springboot.jks
key-password: springboot
key-store-type: JKS
key-alias: 1
但是在ribbon转发的时候遇到个异常:
No subject alternative names matching IP address XXX found
发现是由于服务节点设置了使用ip注册
eureka.instance.prefer-ip-address=true
问题原因:
在发送https的时候会检查ip的主机名,由于设置了使用ip注册所以获取不到主机名,导致该异常出现,去掉就可以使用了,前提是机器间使用主机名可以ping通
private static void matchIP(String var0, X509Certificate var1) throws CertificateException {
Collection var2 = var1.getSubjectAlternativeNames();
if(var2 == null) {
throw new CertificateException("No subject alternative names present");
} else {
Iterator var3 = var2.iterator();
while(var3.hasNext()) {
List var4 = (List)var3.next();
if(((Integer)var4.get(0)).intValue() == 7) {
String var5 = (String)var4.get(1);
if(var0.equalsIgnoreCase(var5)) {
return;
}
try {
if(InetAddress.getByName(var0).equals(InetAddress.getByName(var5))) {
return;
}
} catch (UnknownHostException var7) {
;
} catch (SecurityException var8) {
;
}
}
}
throw new CertificateException("No subject alternative names matching IP address " + var0 + " found");
}
}
网友评论