是否有任何示例/教程可以使用 quarkus.io 构建和配置 TLS 安全的 restful 服务?
不幸的是,我在 quarkus 文档中也找不到,这里没有。
谢谢先生。Guillaume Smet,我找到了解决方案。这是“使用 Quarkus 和 SSL 指南在 5 分钟内从零到你好”。这是由 quarkus undertow 插件完成的。您还需要安装文本编辑器、jdk 1.8+ 和 maven。
首先,创建项目。
mkdir restls
cd restls
mvn io.quarkus:quarkus-maven-plugin:create -DprojectGroupId=org.acme -DprojectArtifactId=restls -DclassName="org.acme.HelloResource" -Dpath="/hello" -Dextensions="undertow"
使用任何编辑器打开您的应用程序配置文件src/main/resources/application.properties
并添加行:
quarkus.http.port=80
quarkus.http.ssl-port=443
quarkus.http.ssl.certificate.key-store-file=keystore.jks
创建包含自签名证书的密钥库(回答所有问题并指定密码,即“密码”):
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 365 -keysize 2048
该文件keystore.jks
必须在src/main/resources/
文件夹中。
构建项目:
mvnw clean package quarkus:build
现在试试看:
java -jar target/restls-1.0-SNAPSHOT-runner.jar
导航到 https://localhost/hello 并允许您的浏览器信任证书。就这样。
您可以像这样在调用时覆盖选项:
java -Dquarkus.http.ssl.certificate.key-store-file=/path-to-keystore/keystore-name.jks -jar target/restls-1.0-SNAPSHOT-runner.jar
最后,这是相关的选项列表:
quarkus.http.ssl.certificate.file -- The file path to a server certificate or certificate chain in PEM format.
quarkus.http.ssl.certificate.key-file -- The file path to the corresponding certificate private key file in PEM format.
quarkus.http.ssl.certificate.key-store-file -- An optional key store which holds the certificate information instead of specifying separate files.
quarkus.http.ssl.certificate.key-store-file-type -- An optional parameter to specify type of the key store file. If not given, the type is automatically detected based on the file name.
您可以指定 PEM 格式的证书 + 密钥文件或密钥库。
我们的 Undertow 扩展确实支持它,但不幸的是,没有记录。
您可以定义如下内容:
quarkus.http.ssl.certificate.file=...
quarkus.http.ssl.certificate.key-file=...
...
在您的 application.properties 中。
配置入口点是ServerSslConfig
(参见https://github.com/quarkusio/quarkus/blob/master/core/runtime/src/main/java/io/quarkus/runtime/configuration/ssl/ServerSslConfig.java#L41)。然后,您添加带有点的嵌套属性并将驼峰式大小写转换为破折号。
如果您想构建本机可执行文件,则很有可能您也必须添加quarkus.ssl.native=true
。
如果您有反馈或想要为此提供指南,请随时加入我们的 Zulip 或在 GitHub 上打开问题/PR。