Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot未能在tomcat 7上加载密钥库类型JKS,原因是;文件名、目录名或卷标语法不正确;_Tomcat_Ssl_Spring Boot - Fatal编程技术网

Spring boot未能在tomcat 7上加载密钥库类型JKS,原因是;文件名、目录名或卷标语法不正确;

Spring boot未能在tomcat 7上加载密钥库类型JKS,原因是;文件名、目录名或卷标语法不正确;,tomcat,ssl,spring-boot,Tomcat,Ssl,Spring Boot,我将在spring boot中设置SSL。但是,它无法启动,并引发下面的异常 ERROR JSSESocketFactory - Failed to load keystore type JKS with path C:\Users\user\AppData\Local\Temp\tomcat.5953177593073698207.443\file:/D:/workspace-spring/project/keystore.jks due to C:\Users\user\AppData\Lo

我将在spring boot中设置SSL。但是,它无法启动,并引发下面的异常

ERROR JSSESocketFactory - Failed to load keystore type JKS with path C:\Users\user\AppData\Local\Temp\tomcat.5953177593073698207.443\file:/D:/workspace-spring/project/keystore.jks due to C:\Users\user\AppData\Local\Temp\tomcat.5953177593073698207.443\file:\D:\workspace-spring\project\keystore.jks (The filename, directory name, or volume label syntax is incorrect)
java.io.FileNotFoundException: C:\Users\user\AppData\Local\Temp\tomcat.5953177593073698207.443\file:\D:\workspace-spring\project\keystore.jks (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileInputStream.open(Native Method) ~[na:1.6.0_45]
    at java.io.FileInputStream.<init>(FileInputStream.java:120) ~[na:1.6.0_45]
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getStore(JSSESocketFactory.java:413) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeystore(JSSESocketFactory.java:319) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:577) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.getKeyManagers(JSSESocketFactory.java:517) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:493) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:653) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:449) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:1007) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.apache.catalina.core.StandardService.addConnector(StandardService.java:241) [tomcat-embed-core-7.0.59.jar:7.0.59]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:194) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:151) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:290) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540) [spring-context-4.2.3.RELEASE.jar:4.2.3.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.doRun(SpringApplication.java:347) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:295) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1112) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1101) [spring-boot-1.3.0.RELEASE.jar:1.3.0.RELEASE]
    at biz.tfsystem.questionnaire.manager.Application.main(Application.java:32) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) ~[na:1.6.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0_45]
    at java.lang.reflect.Method.invoke(Method.java:597) ~[na:1.6.0_45]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.3.0.RELEASE.jar:1.3.0.RELEASE]
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.programmingfree</groupId>
    <artifactId>pf-securing-web</artifactId>
    <version>0.1.0</version>
    <packaging>war</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>javax.transaction-api</artifactId>
                    <groupId>javax.transaction</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.6</java.version>
        <tomcat.version>7.0.59</tomcat.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

4.0.0
org.programmingfree
在Java6项目中启用HTTPS

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createSslConnector());
    return tomcat;
}

private Connector createSslConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
    try {
        File keystore = new ClassPathResource("keystore.jks").getFile();
        File truststore = new ClassPathResource("keystore.jks").getFile();
        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(8443);
        protocol.setSSLEnabled(true);
        protocol.setKeystoreFile(keystore.getAbsolutePath());
        protocol.setKeystorePass("<password>");
        protocol.setTruststoreFile(truststore.getAbsolutePath());
        protocol.setTruststorePass("<password>");
        protocol.setKeyAlias("<alias>");
        return connector;
    }
    catch (IOException ex) {
        throw new IllegalStateException("can't access keystore: [" + "keystore"
                + "] or truststore: [" + "keystore" + "]", ex);
    }
}
@Bean
公共嵌入的ServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory tomcat=新的TomcatEmbeddedServletContainerFactory();
addAdditionalTomcatConnectors(createSslConnector());
返回tomcat;
}
专用连接器createSslConnector(){
连接器连接器=新连接器(“org.apache.coyote.http11.Http11NioProtocol”);
Http11NioProtocol协议=(Http11NioProtocol)连接器。getProtocolHandler();
试一试{
File keystore=new ClassPathResource(“keystore.jks”).getFile();
File truststore=new ClassPathResource(“keystore.jks”).getFile();
连接器。设置模式(“https”);
连接器。设置安全(正确);
连接器。设置端口(8443);
协议。设置可启用(true);
protocol.setKeystoreFile(keystore.getAbsolutePath());
协议。setKeystorePass(“”);
protocol.setTruststoreFile(truststore.getAbsolutePath());
协议。setTruststorePass(“”);
协议。setKeyAlias(“”);
返回连接器;
}
捕获(IOEX异常){
抛出新的IllegalStateException(“无法访问密钥库:[“+”密钥库”
+“]或信任库:[“+”密钥库“+”],例如);
}
}

您需要使用更为更新的Tomcat 7版本。在编写最新版本时是7.0.67。

将tomcat更新到7.0.67版后,它抛出java.lang.NoClassDefFoundError:java/nio/charset/StandardCharset。它是。不会引发此异常的最新tomcat是7.0.59。很抱歉,在这种情况下,您必须自己配置SSL。SpringBoot依赖于7.0.66及更高版本的更改,Tomcat声明Tomcat7只需要Java6。您确定是Tomcat本身需要
StandardCharsets
?spring boot starter web依赖于Tomcat embed websocket,根据Tomcat的定义,它需要Java 7。我认为这就是为什么SpringBoot在中指定Tomcat7.0.59的原因。好的,我现在能够在SpringBoot中使用HTTPS示例。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.programmingfree</groupId>
    <artifactId>pf-securing-web</artifactId>
    <version>0.1.0</version>
    <packaging>war</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>javax.transaction-api</artifactId>
                    <groupId>javax.transaction</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.6</java.version>
        <tomcat.version>7.0.59</tomcat.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>
@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createSslConnector());
    return tomcat;
}

private Connector createSslConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
    try {
        File keystore = new ClassPathResource("keystore.jks").getFile();
        File truststore = new ClassPathResource("keystore.jks").getFile();
        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(8443);
        protocol.setSSLEnabled(true);
        protocol.setKeystoreFile(keystore.getAbsolutePath());
        protocol.setKeystorePass("<password>");
        protocol.setTruststoreFile(truststore.getAbsolutePath());
        protocol.setTruststorePass("<password>");
        protocol.setKeyAlias("<alias>");
        return connector;
    }
    catch (IOException ex) {
        throw new IllegalStateException("can't access keystore: [" + "keystore"
                + "] or truststore: [" + "keystore" + "]", ex);
    }
}