最近在使用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/
配置成功。只是目前只能在pc端浏览器访问,还不能在移动端正常访问。接下来会专门写一下如何在移动端配合retrofit或者okhttp访问自签名的https服务。