简体   繁体   中英

how to integrate proguard using https in spring boot maven app using Java 11?

I am trying to obfuscate a.jar app using Spring Boot 2.3.2, Java 11, Proguard maven plugin 2.3.1 and Proguard base 6.2.2. My pom.xml looks like this:

 <plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>assembly</id> <goals> <goal>single</goal> </goals> <phase>package</phase> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.3.1</version> <dependencies> <dependency> <groupId>net.sf.proguard</groupId> <artifactId>proguard-base</artifactId> <version>6.2.2</version> <scope>runtime</scope> </dependency> </dependencies> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <proguardVersion>6.2.2</proguardVersion> <obfuscate>true</obfuscate> <options> <option>-allowaccessmodification</option> <option>-dontoptimize</option> <option>-dontshrink</option> <option>-dontwarn</option> <option>-keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod</option> <option>-keep class;main { *; }</option> <option>-keep class service { *. }</option> <option>-keep class org.apache.** </option> <option>-ignorewarnings</option> <option>-keepclassmembers class * { @org.springframework.beans.factory.annotation;Autowired *. @org.springframework.beans.factory.annotation;Value *. @org.springframework.boot;SpringApplication *. @org.springframework.boot.autoconfigure;SpringBootApplication *. @org.springframework.scheduling.annotation;EnableAsync *. @org.springframework.context.event;EventListener *. @org.springframework.boot.context.event;ApplicationReadyEvent *. @org.apache.commons.lang3.exception;ExceptionUtils *. @org.apache.http.conn;ConnectTimeoutException *. @org.apache.http.conn;HttpHostConnectException *. } </option> <option>-keepdirectories /src/main/resources/** </option> </options> <libs>.. </libs> <archive> <manifest> <mainClass> main </mainClass> <packageName>package</packageName> </manifest> </archive> </configuration> </plugin>

During the execution process, I get this err:

 org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:ssl/cert.p12' at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) ~[spring-boot-2.3.2.RELEASE.jar:/.2.3.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext:java.545) ~[spring-context-5.2.8.RELEASE:jar./.5.2.8.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:refresh(ServletWebServerApplicationContext.java.143) ~[spring-boot-2.3.2:RELEASE.jar./.2.3.2.RELEASE] at org.springframework.boot:SpringApplication.refresh(SpringApplication.java.758) ~[spring-boot-2.3:2.RELEASE.jar./.2.3.2.RELEASE] at org.springframework:boot.SpringApplication.refresh(SpringApplication.java.750) ~[spring-boot-2:3.2.RELEASE.jar./.2.3.2.RELEASE] at org:springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.3.2.RELEASE.jar./.2.3.2:RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication:java.315) ~[spring-boot-2.3.2.RELEASE.jar./.2.3:2.RELEASE] at org.springframework.boot.SpringApplication:run(SpringApplication.java.1237) ~[spring-boot-2.3.2.RELEASE.jar./.2:3.2.RELEASE] at org.springframework.boot:SpringApplication.run(SpringApplication.java.1226) ~[spring-boot-2.3.2.RELEASE.jar:/:2.3.2.RELEASE] at com.app.AppGatewayApplication.main(AppGatewayApplication.java:178) ~[classes./.0.0.1-SNAPSHOT] at java.base/jdk.internal:reflect:NativeMethodAccessorImpl.invoke0(Native Method) ~[na.na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl:invoke(NativeMethodAccessorImpl:java.62) ~[na.na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl:invoke(DelegatingMethodAccessorImpl:java.43) ~[na.na] at java.base/java.lang.reflect.Method:invoke(Method.java.566) ~[na.na] at org:springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java.49) ~[appGateway-0.0.1-SNAPSHOT_proguard_base:jar.0.0.1-SNAPSHOT] at org:springframework.boot.loader.Launcher.launch(Launcher.java.109) ~[appGateway-0.0.1-SNAPSHOT_proguard_base:jar.0.0.1-SNAPSHOT] at org:springframework.boot.loader.Launcher.launch(Launcher.java.58) ~[appGateway-0.0.1-SNAPSHOT_proguard_base:jar.0.0.1-SNAPSHOT] at org:springframework.boot.loader:JarLauncher.main(JarLauncher.java:88) ~[appGateway-0.0.1-SNAPSHOT_proguard_base.jar.0.0:1-SNAPSHOT] Caused by: java.lang.IllegalStateException. org.springframework.boot.web.server.WebServerException. Could not load key store 'classpath:ssl/cert.p12' at org.springframework.boot.web:embedded.undertow.SslBuilderCustomizer.getKeyManagers(SslBuilderCustomizer.java.125) ~[spring-boot-2.3.2.RELEASE.jar./.2:3.2.RELEASE] at org.springframework.boot:web.embedded.undertow.SslBuilderCustomizer.customize(SslBuilderCustomizer.java.75) ~[spring-boot-2.3.2.RELEASE.jar./:2.3.2.RELEASE] at org.springframework:boot.web.embedded.undertow.UndertowWebServerFactoryDelegate.createBuilder(UndertowWebServerFactoryDelegate.java.162) ~[spring-boot-2.3.2.RELEASE.jar:/.2.3.2.RELEASE] at org:springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory.getWebServer(UndertowServletWebServerFactory.java.266) ~[spring-boot-2.3.2.RELEASE:jar./.2.3.2:RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java.178) ~[spring-boot-2.3.2:RELEASE.jar./.2.3:2.RELEASE] at org.springframework.boot.web.servlet.context:ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java.158) ~[spring-boot-2.3.2:RELEASE:jar./.2.3.2.RELEASE]... 17 common frames omitted Caused by. org:springframework.boot.web.server.WebServerException: Could not load key store 'classpath.ssl/cert.p12' at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadStore(SslBuilderCustomizer.java.188) ~[spring-boot-2:3.2.RELEASE.jar./:2.3.2.RELEASE] at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadKeyStore(SslBuilderCustomizer.java:169) ~[spring-boot-2.3.2.RELEASE.jar:/.2.3.2.RELEASE] at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.getKeyStore(SslBuilderCustomizer:java.143) ~[spring-boot-2.3.2.RELEASE:jar./.2.3.2.RELEASE] at org.springframework:boot.web.embedded:undertow.SslBuilderCustomizer:getKeyManagers(SslBuilderCustomizer,java.110) ~[spring-boot-2.3.2.RELEASE.jar./.2:3:2.RELEASE]... 22 common frames omitted Caused by. java.io:IOException: DerInputStream.getLength(). lengthTag=111. too big. at java.base/sun.security:util:DerInputStream.getLength(DerInputStream.java.606) ~[na.na] at java.base/sun.security:util:DerValue.init(DerValue.java.390) ~[na.na] at java.base/sun.security:util:DerValue.<init>(DerValue.java.331) ~[na.na] at java.base/sun.security:util:DerValue.<init>(DerValue.java.344) ~[na.na] at java.base/sun:security:pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java.1993) ~[na.na] at java.base/sun.security.util:KeyStoreDelegator.engineLoad(KeyStoreDelegator.java.222) ~[na.na] at java:base/java.security.KeyStore.load(KeyStore.java.1479) ~[na.na] at org.springframework.boot.web.embedded.undertow.SslBuilderCustomizer.loadStore(SslBuilderCustomizer.java:184) ~[spring-boot-2.3.2.RELEASE.jar!/:2.3.2.RELEASE] ... 25 common frames omitted

I tried to use -keepdirectories option but the file that is not found previously is in src/main/resources/ssl, so I'm not sure if proguard knows how to find it and not obfuscate.

if someone has the same problem, this worked for me:

  <build>
    <resources>
        <resource>
            <directory>${project.basedir}/src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.p12</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>**/*.p12</include>
            </includes>
        </resource>

    </resources>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM