我已经创建了示例jHipster app。现在我想在本地添加自签名SSL证书和测试以访问https。怎么做到这一点?
答案 0 :(得分:69)
这些说明适用于JHipster所基于的所有Spring Boot应用程序。我在新生成的JHipster 2.7项目上测试了这个。
从头开始,您需要完成以下步骤:
首先,您需要在项目目录中生成自签名证书,这可以使用keytool
完成,这是Java提供的实用程序脚本:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: yes
我选择了密码mypassword
,这是我将在下一步中使用的密码。完成此操作后,您将在当前目录中看到keystore.p12
。
application.properties
或application.yml
现在您需要为Tomcat添加HTTPS连接器属性。您可以在src/main/resources/
中找到属性(yml)文件,并且需要更新application.yml
(或者仅用于application-dev.yml
中的开发,具有以下属性:
server:
ssl:
key-store: keystore.p12
key-store-password: mypassword
keyStoreType: PKCS12
keyAlias: tomcat
现在,您可以使用mvn clean package
将应用程序与Maven(或Gradle,如果您为JHipster应用程序选择)一起打包,并使用 mvn spring-boot:run 运行应用程序。您现在可以通过 https://localhost:8080
为了简单起见,我没有更改端口,但理想情况下你应该在属性文件中更改它,但我把它遗漏了,因为它们已经在application-dev.yml
和application-prod.yml
中定义了所以你会必须在那里更改它或将其删除并将其放入一般application.yml
您只能通过application.properties
启用一个协议,因此当您执行此操作时,只有HTTPS才有效。如果您希望HTTP也能正常工作,并重定向到HTTPS,则必须添加@Configuration
类,如下所示
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8443);
return connector;
}
此回复基本上是关于同一主题的博客文章的副本:http://www.drissamri.be/blog/java/enable-https-in-spring-boot/
答案 1 :(得分:5)
扩展Driss Amri brilliant answer如何重新启用BrowserSync
。
如果您选择不支持http,或者http被重定向到https,则BrowserSync
将无效。为了使其再次起作用,在以下方面进行的改动很少:
gulp / config.js ,apiPort
和uri
:
apiPort: 8443,
uri: 'https://localhost:',
gulp / serve.js :将options.rejectUnauthorized = false;
添加到proxyRoutes
中,以便该节点不会抱怨自签名证书:
proxyRoutes.map(function (r) {
var options = url.parse(baseUri + r);
options.route = r;
options.preserveHost = true;
options.rejectUnauthorized = false;
return proxy(options);
}));
可选择让BrowserSync
通过https提供内容。我推荐Spring Social
来节省一些麻烦。只需将https: true
添加到gulp / serve.js中的browserSync
调用中:
browserSync({
open: true,
port: config.port,
server: {
baseDir: config.app,
middleware: proxies
},
https: true
});
现在,BrowserSync将使用随附的自签名证书提供内容。可以重复使用为Spring Boot
创建的帐户,更多地使用BrowserSync homepage。
答案 2 :(得分:1)
对于那些使用webpack而非gulp的人,您可以通过两项更改完成Driss Amri's回答:
修改 proxy.conf.json :
{
"*": {
"target": "https://localhost:8443",
"secure": true
}
}
这会将API请求重定向到新的https地址。 然后改为webpack文件,例如 webpack.dev.js 修改后的例子:
module.exports = webpackMerge(commonConfig({ env: ENV }), {
devtool: 'eval-source-map',
devServer: {
contentBase: './target/www',
proxy: [{
context: [
/* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */
'/api',
'/management', ...
'/auth'
],
target: 'https://127.0.0.1:8443',
/* set secure to false here, otherwise self-signed certification cause DEPTH_ZERO_SELF_SIGNED_CERT proxy errors */
secure: false
}]
},