Skip to content

TLS证书加载时遇到文件URL解析错误, 会导致启动失败, 此时打印的错误信息不清晰 #3977

@yhs0092

Description

@yhs0092

问题场景

业务从 Java-Chassis 1.3.11 升级到 2.8.9.
他们的配置文件里一直会配TLS的信任证书和身份证书, 自定义扩展了一个SSLCustom根据文件名生成文件全路径.
在Windows开发环境下, 证书不存在, 在 1.3.11 版本org.apache.servicecomb.foundation.vertx.VertxTLSBuilder#isFileExists方法只检查指定路径在磁盘上是否存在, 不存在就返回false不加载证书, 因此不会报错.
但升级 Java-Chassis 2.8.9 后, 新增了从ClassLoader加载 resource 的逻辑, 传入D:\xxx\yyy\server.p12这种文件路径会遇到文件URL解析错误:

Caused by: java.lang.IllegalArgumentException: name
	at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:703)
	at sun.misc.URLClassPath.findResource(URLClassPath.java:225)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:572)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:570)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findResource(URLClassLoader.java:569)
	at java.lang.ClassLoader.getResource(ClassLoader.java:1089)
......
	at org.apache.servicecomb.foundation.vertx.VertxTLSBuilder.isFileExists(VertxTLSBuilder.java:179)
	at org.apache.servicecomb.foundation.vertx.VertxTLSBuilder.buildTCPSSLOptions(VertxTLSBuilder.java:116)
	at org.apache.servicecomb.foundation.vertx.VertxTLSBuilder.buildClientOptionsBase(VertxTLSBuilder.java:98)
	at org.apache.servicecomb.foundation.vertx.VertxTLSBuilder.buildHttpClientOptions(VertxTLSBuilder.java:91)
	at org.apache.servicecomb.foundation.vertx.VertxTLSBuilder.buildHttpClientOptions(VertxTLSBuilder.java:86)
	at org.apache.servicecomb.foundation.vertx.client.http.HttpClientOptionsSPI.createHttpClientOptions(HttpClientOptionsSPI.java:134)

这个异常看着令人费解, 以为是业务配了什么叫"name"的配置值,
但从实际的报错位置sun.misc.URLClassPath.Loader#findResource来看, 是表示findResource输入的name参数有问题, 解析不出合适的URL.

        URL findResource(final String name, boolean check) {
            URL url;
            try {
                url = new URL(base, ParseUtil.encodePath(name, false));
            } catch (MalformedURLException e) {
                throw new IllegalArgumentException("name");
            }
      //  ....

期望

能否优化一下VertxTLSBuilder.isFileExists方法的逻辑, 不要直接抛出原始的异常, 最好是包装或者转换一下异常, 提醒业务是什么文件路径下找不到证书.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions