SpringBoot使用自签名HTTPS证书

869 阅读2分钟

最近在使用app访问自己的书摘后端的时候发现使用的协议是http,竟然忘了配置https哈哈。要配制https,就需要用到ssl证书。证书一般分为两种,一种是公网上受信任的证书,通常由专门的CA机构颁发。一种是自签名的证书,可以供学习使用。正式的CA证书都是需要付费申请的,而自签名证书可以自己生成,无需申请。

CA证书和自签名证书的区别

  • 自签名证书:
    • 免费且不用申请,自己借助工具生成
    • 不安全,虽然避免了明文传输数据,但是由于证书长期有效,容易被破解
    • 不被浏览器或者一些框架信任,如果是浏览器访问自签名地址,会被标识成不被信任的站点
  • CA证书
    • ca证书需要申请或者去一些代理机构比如阿里云、腾讯云等购买
    • 安全,正式的CA证书一般都是有有效期的,定期更新,保证了安全性
    • 浏览器信任,各大框架也都支持

创建自签名证书

本人惯用的开发语言是Java,所以介绍一下windows中用Java生成自签名证书的过程。用管理员模式打开命令提示符,cd到jdk的bin目录下输入一下命令

keytool -genkeypair -alias serverssl -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore ssl-key.p12 -validity 3650

按回车输入密钥库口令,回车按照提示回答一系列问题然后继续回车一直到出现 是否确认 的提示,输入y,完成创建。刚刚创建的ssl-key.p12签名文件就位于jdk的bin目录下。

在SpringBoot中使用自签名证书

如果要在SpringBoot中使用刚创建的证书,需要将证书复制一份到springboot工程的resources目录下,然后配置application.properties或者yml。

#https端口号.
server.port=8080
#证书的路径.
server.ssl.key-store=src/main/resources/ssl-key.p12
#证书密码,请修改为您自己证书的密码.
server.ssl.key-store-password=生成证书时候填的密码
#秘钥库类型
server.ssl.keyStoreType=PKCS12
#证书别名
server.ssl.keyAlias=serverssl

测试一下

编写一个Controller然后启动项目

@Controller
@RequestMapping("/shici")
class WebController {
    @GetMapping("/")
    fun index():String{
        return "index"
    }
 }

浏览器中输入地址https://127.0.0.1:8080/shici/

图片.png 配置成功。只是目前只能在pc端浏览器访问,还不能在移动端正常访问。接下来会专门写一下如何在移动端配合retrofit或者okhttp访问自签名的https服务。