Skip to main content

安全策略

在当今数字化时代,系统安全极其重要,本框架针对常见场景进行了诸多安全方面的设计,主要分为网络安全和数据安全两大部分。尽管这些安全策略还远远不够,但聊胜于无,后续还会不断增加更多安全策略。

网络安全#

连接限制#

如果需要对下载速度进行限制,可以设定限流策略,下面的实例进行了下载速率和并发限制:

public class Main extends Application {
@Override
protected void initialize() {
// 开启速率限制
security().setEnableDownloadRateLimiter(true);
// 不跳过本地IP,默认对本地IP不做限制,这里为了测试方便而关闭
security().setEnableSkipLocalIp(false);
// 设置限制下载速率为 10K 字节每秒
security().setLimitRateBytes(10 * 1024);
// 开启并发请求限制
security().setEnableConcurrentRequestLimiter(true);
// 限制每IP允许2个连接
security().setMaxConcurrentPerIp(2);
}
public static void main(String[] args) {
Ready.For(Main.class).Work(args);
}
}

以上对基本的限流做了演示,还有许多IP方面的策略,例如IP黑白名单、按url设定IP策略、按请求头设定IP策略等等,后续逐步完善更多具体的文档,并对重点内容进行专题描述。

跨域请求(CORS)#

框架支持2中方式设定跨域请求参数:

  1. 在Controller类或其action方法上通过@EnableCORS注解设置。
  2. 通过配置文件设置,例如:
# Application configuration
---
readyWork:
serverModule:
moduleConfig:
corsServerModule:
enabled: true
description: Cors Server Module
allowedOrigins:
- "*"
- http://localhost
allowedMethods:
- GET
- POST

然后在应用启动时开启CorsServerModule模块:

public class Main extends Application {
@Override
protected void initialize() {
// 如果不喜欢在上面的yaml配置文件中设置,或者想覆盖上面配置文件的设定,可以在这里进行程序化设置
applicationConfig().getServerModule().getModuleConfig().put("corsServerModule",
Kv.by("allowedOrigins", Arrays.asList(new String[]{"*"})).set("allowedMethods", Arrays.asList(new String[]{"GET"})));
// 开启CorsServerModule模块
handler().addHandler(new String[]{"/**"}, new RequestMethod[]{RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, new CorsServerModule());
}
public static void main(String[] args) {
Ready.For(Main.class).Work(args);
}
}

SSL/TLS支持#

创建证书#

如果只是让web服务器支持https,只需要下面第一步即可。后面的第2步到第6步是为客户端和服务端建立点对点双向认证的安全通道。

1)创建server的keystore文件,生成server的公钥/私钥密钥对。需要指定keystore的密码(storepass)和密钥对的密码(keypass)。 访问keystore需要storepass。访问密钥对需要keypass。
keytool -genkey -alias readyserver -keyalg rsa -keysize 1024 -sigalg sha256withrsa -keypass 123456 -keystore readyserver.keystore -storepass 123456 -validity 36500 -dname "CN=localhost,CN=ready.work,OU=ReadyWork,O=ReadyWork,L=WuHan,ST=HuBei,C=CN"

2)创建client的keystore文件。同样需要指定keystore的密码和密钥对的密码。
keytool -genkey -alias readyclient -keyalg dsa -keysize 1024 -sigalg sha1withdsa -keypass 654321 -keystore readyclient.keystore -storepass 654321 -validity 36500 -dname "CN=localhost,CN=ready.work,OU=ReadyWork,O=ReadyWork,L=WuHan,ST=HuBei,C=CN"

3)从server的keystore中导出server的证书(其中包括server的公钥)。
keytool -export -alias readyserver -keystore readyserver.keystore -storepass 123456 -file readyserver.cer

4)从client的keystore中导出client的证书(其中包括client的公钥)。
keytool -export -alias readyclient -keystore readyclient.keystore -storepass 654321 -file readyclient.cer

5)创建server的truststore文件并导入client的证书(其中包括client的公钥)。
keytool -import -alias readyclient -keystore readyserver.truststore -storepass 123456 -file readyclient.cer

6)创建client的truststore文件并导入server的证书(其中包括server的公钥)。
keytool -import -alias readyserver -keystore readyclient.truststore -storepass 654321 -file readyserver.cer

提醒

需要注意的是,上面创建的证书属于私有证书,未经过第三方权威机构认证,也不是由国际安全证书公司签发,所以浏览器认为是非法证书。 如果你是向公众提供服务,那么建议你购买专业HTTPS证书,或者申请 Let’s Encrypt 与 TrustAsia CA 的免费 HTTPS 证书。 如果是集群内部或内网之间的HTTPS安全认证,可以使用上面的方式创建私有证书即可,注意storepass和keypass密码的保密。

开启HTTPS#

开启HTTPS服务只需要进行配置即可,首先要开启enableHttps=true,并设置https端口,例如httpsPort: 8443,然后将上面生成的证书放到项目的resources根目录,或者其他目录,最后在配置文件中指定证书路径信息和密码即可。请参考下面的实例:

# configuration for dev environment
---
readyWork:
server:
# This is the default binding address.
ip: 0.0.0.0
# Http port if enableHttp is true.
httpPort: 8080
# Enable HTTP should be false by default on official environment.
enableHttp: true
# Https port if enableHttps is true.
httpsPort: 8443
# Enable HTTPS should be true on official environment.
enableHttps: true
security:
# https configuration
# Keystore file name in config folder.
serverKeystoreName: readyserver.keystore
# Keystore password
serverKeystorePass: 123456
# Private key password
serverKeyPass: 123456
# 如果只需要WEB服务器提供HTTPS服务,只需要上面的配置即可,下面设置可以忽略
# 如果客户端和服务器双向认证,需要配置下面的内容,并开启enableTwoWayTls: true
# Truststore file name in config folder.
serverTruststoreName: readyserver.truststore
# Truststore password
serverTruststorePass: 123456
# Two way TLS
enableTwoWayTls: false

上述证书是放置在了当前项目的resources根目录,也可以放置到项目工作空间下面的子目录,配置中设置好路径后,系统会自动寻找。 经过上面的配置后,启动服务即可通过https://localhost:8443/方式访问,如果chrome浏览器弹出警告,输入(盲敲)thisisunsafe即可通过,这是chrome浏览器的暗号。

分布式OAUTH2#

原生分布式OAUTH2,无外部依赖,但未实现全部OAUTH2标准,无需单独部署,随节点增加自动扩容。分布式OAUTH2是本框架提供的一个重要安全模块,即将开放。

网络安全方面还有更多内容,以上只列举部分重点内容。后续逐步完善更多具体的文档,并对重点内容进行专题描述。

数据安全#

数据安全属于本框架提供的另外一个重大模块,即将开放: 基于本框架的所有SQL操作都将经过审计,并可以动态按表、按类、按类的方法、按角色配置字段级别数据权限。 基于框架controller的输入(GET/PUT/POST…)与输出(页面/Json/Xml)都将经过审计,可动态按表、按类、按类的方法、按角色配置输入、输出字段级别数据权限。