问题
你希望你的应用程序可以通过HTTPS访问(或代替HTTP)。
解决方案
获取一个证书,将其放入密钥库中,并使用server.ssl属性来配置密钥库。然后
Spring Boot将自动配置服务器仅通过HTTPS访问。
它是如何工作的
使用server.ssl.keystore(及相关属性),你可以配置嵌入式容器仅接受HTTPS连接。
在配置SSL之前,你需要有一个证书来保护你的应用程序。通常,你会希望从证书颁
发机构如Verisign或Let's Encrypt获取证书。然而,出于开发目的,你可以使用自签名
证书(参见“创建自签名证书”部分)。
创建自签名证书
Java附带了一个名为keytool的工具,可以用来生成证书等。参见列表4-32。
此命令将指示keytool使用RSA算法生成一个密钥,并将其放置在名为sb3-recipes.pfx的密钥库中,别名为sb3-recipes,有效期为3,600天。运行命令时,它会提出一些问题并相应地回答(或留空)。之后,将有一个名为sb3-recipes.pfx的文件,其中包含用密码保护的证书。
将此文件放在src/main/resources文件夹中,以便它作为应用程序的一部分被打包,并且Spring Boot可以轻松访问它。
使用自签名证书将在浏览器中产生一个警告,提示网站不安全或未受保护。
配置Spring Boot使用密钥库
Spring Boot需要知道密钥库才能配置嵌入式容器。为此,首先创建一个所谓的SSL包,并使用server.ssl.bundle属性将其与服务器链接。
为此,请使用server.ssl.keystore属性。您还需要指定密钥库的类型(pkcs12)和密码。参见列表4-33。
这些SSL属性将创建一个名为server的SSL包。它是一个JKS类型。为了传递别名(用于创建证书),使用key.alias属性,对于密码则使用key.password属性。此外,我们需要链接到实际的证书,该证书位于sb3-recipes.pfx文件中。为此,使用keystore.location属性,因为这个文件是受密码保护的。我们需要指定keystore.password属性,最后还需要指定证书的类型。
现在,当通过HTTPS访问服务器时,由于使用的是自签名证书,你将会收到一个警告。当使用官方证书时,显然你不会收到这个警告。参见图4-9。