ソースを参照

查询证书有效期

yjj 1 年間 前
コミット
9a1a34eca4

+ 10 - 0
pom.xml

@@ -89,6 +89,16 @@
             <artifactId>aliyun-java-sdk-core</artifactId>
             <version>4.5.0</version>
         </dependency>
+        <dependency>
+            <groupId>net.arnx</groupId>
+            <artifactId>jsonic</artifactId>
+            <version>1.3.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>dysmsapi20170525</artifactId>

+ 0 - 147
src/main/java/com/example/demo/demos/web/constant/Constants.java

@@ -1,7 +1,6 @@
 package com.example.demo.demos.web.constant;
 
 
-import java.util.Locale;
 
 /**
  * 通用常量信息
@@ -35,21 +34,6 @@ public class Constants
      */
     public static final String UTF8 = "UTF-8";
 
-    /**
-     * GBK 字符集
-     */
-    public static final String GBK = "GBK";
-
-    /**
-     * 系统语言
-     */
-    public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE;
-
-    /**
-     * www主域
-     */
-    public static final String WWW = "www.";
-
     /**
      * http请求
      */
@@ -59,135 +43,4 @@ public class Constants
      * https请求
      */
     public static final String HTTPS = "https://";
-
-    /**
-     * 通用成功标识
-     */
-    public static final String SUCCESS = "0";
-
-    /**
-     * 通用失败标识
-     */
-    public static final String FAIL = "1";
-
-    /**
-     * 登录成功
-     */
-    public static final String LOGIN_SUCCESS = "Success";
-
-    /**
-     * 注销
-     */
-    public static final String LOGOUT = "Logout";
-
-    /**
-     * 注册
-     */
-    public static final String REGISTER = "Register";
-
-    /**
-     * 登录失败
-     */
-    public static final String LOGIN_FAIL = "Error";
-
-    /**
-     * 所有权限标识
-     */
-    public static final String ALL_PERMISSION = "*:*:*";
-
-    /**
-     * 管理员角色权限标识
-     */
-    public static final String SUPER_ADMIN = "admin";
-
-    /**
-     * 角色权限分隔符
-     */
-    public static final String ROLE_DELIMETER = ",";
-
-    /**
-     * 权限标识分隔符
-     */
-    public static final String PERMISSION_DELIMETER = ",";
-
-    /**
-     * 验证码有效期(分钟)
-     */
-    public static final Integer CAPTCHA_EXPIRATION = 2;
-
-    /**
-     * 令牌
-     */
-    public static final String TOKEN = "token";
-
-    /**
-     * 令牌前缀
-     */
-    public static final String TOKEN_PREFIX = "Bearer ";
-
-    /**
-     * 令牌前缀
-     */
-    public static final String LOGIN_USER_KEY = "login_user_key";
-
-    /**
-     * 用户ID
-     */
-    public static final String JWT_USERID = "userid";
-
-    /**
-     * 用户头像
-     */
-    public static final String JWT_AVATAR = "avatar";
-
-    /**
-     * 创建时间
-     */
-    public static final String JWT_CREATED = "created";
-
-    /**
-     * 用户权限
-     */
-    public static final String JWT_AUTHORITIES = "authorities";
-
-    /**
-     * 资源映射路径 前缀
-     */
-    public static final String RESOURCE_PREFIX = "/profile";
-
-    /**
-     * RMI 远程方法调用
-     */
-    public static final String LOOKUP_RMI = "rmi:";
-
-    /**
-     * LDAP 远程方法调用
-     */
-    public static final String LOOKUP_LDAP = "ldap:";
-
-    /**
-     * LDAPS 远程方法调用
-     */
-    public static final String LOOKUP_LDAPS = "ldaps:";
-
-    /**
-     * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
-     */
-    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.aivideo" };
-
-    /**
-     * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
-     */
-    public static final String[] JOB_WHITELIST_STR = { "com.aivideo.quartz.task","com.aivideo.business" };
-
-    /**
-     * 定时任务违规的字符
-     */
-    public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
-            "org.springframework", "org.apache", "com.aivideo.common.utils.file", "com.aivideo.common.config", "com.aivideo.generator" };
-
-    public static final int DEFAULT_PAGE = 1;
-
-    //默认分页
-    public static final int DEFAULT_LIMIT = 20;
 }

+ 9 - 12
src/main/java/com/example/demo/demos/web/controller/EcsController.java

@@ -1,12 +1,9 @@
 package com.example.demo.demos.web.controller;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.example.demo.demos.web.service.EcsInfoService;
 import com.example.demo.demos.web.service.EcsService;
 import com.example.demo.demos.web.domain.EcsInfo;
 import com.example.demo.demos.web.domain.Result;
-import com.example.demo.demos.web.service.impl.EcsInfoServiceImpl;
-import com.example.demo.demos.web.task.SendMsgTask;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -22,20 +19,20 @@ public class EcsController {
     @Autowired
     private EcsInfoService ecsInfoService;
 
-    @PostMapping("/get")
-    public Result getCertificate(@RequestBody String url){
+    @GetMapping("/get/{url}")
+    public Result getCertificate(@PathVariable String url){
         Certificate certificate = ecsService.getCertificate(url);
         return Result.success(certificate);
     }
 
     @GetMapping("/list")
-    public Result getCertificateList(@RequestParam(defaultValue = "1") Integer page,
-                                     @RequestParam(defaultValue = "10") Integer size){
-//        List<EcsInfo> list = ecsInfoService.list();
-        Page<EcsInfo> pageInfo = new Page<>(page, size);
-//        pageInfo.setRecords(list);
-        Page<EcsInfo> infoPage = ecsInfoService.page(pageInfo);
-        return Result.success(infoPage);
+    public List<EcsInfo> getCertificateList(){
+        return ecsInfoService.list();
+    }
+
+    @GetMapping("/crtList")
+    public List<String> crtList(){
+        return ecsInfoService.crtList();
     }
 
     /**

+ 15 - 13
src/main/java/com/example/demo/demos/web/domain/EcsInfo.java

@@ -1,7 +1,6 @@
 package com.example.demo.demos.web.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -14,19 +13,22 @@ public class EcsInfo{
     @TableId(value = "id",type = IdType.AUTO)
     private Integer id;
     // 版本号
-    private String version;
+//    private String version;
     // 序列号
-    private String serialNumber;
-    // 颁发给
-    @TableField(value = "subject_dn_name")
-    private String subjectDNName;
-    // 颁发者
-    @TableField(value = "issuer_dn_name")
-    private String issuerDNName;
-    // 签名算法
-    private String sigAlgName;
-    // 证书有效期开始
-    private Date notBefore;
+//    private String serialNumber;
+
+    // 域名地址
+    private String url;
+//    // 颁发给
+//    @TableField(value = "subject_dn_name")
+//    private String subjectDNName;
+//    // 颁发者
+//    @TableField(value = "issuer_dn_name")
+//    private String issuerDNName;
+//    // 签名算法
+//    private String sigAlgName;
+//    // 证书有效期开始
+//    private Date notBefore;
     // 证书有效期结束
     private Date notAfter;
 }

+ 2 - 0
src/main/java/com/example/demo/demos/web/service/EcsInfoService.java

@@ -8,4 +8,6 @@ import java.util.List;
 public interface EcsInfoService extends IService<EcsInfo> {
 
     void getInfos();
+
+    List<String > crtList();
 }

+ 2 - 4
src/main/java/com/example/demo/demos/web/service/EcsService.java

@@ -1,9 +1,7 @@
 package com.example.demo.demos.web.service;
 
-import org.springframework.stereotype.Service;
-
-import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
 
 public interface EcsService {
-    Certificate getCertificate(String url);
+    X509Certificate getCertificate(String url);
 }

+ 35 - 2
src/main/java/com/example/demo/demos/web/service/impl/EcsInfoServiceImpl.java

@@ -7,12 +7,13 @@ import com.example.demo.demos.web.constant.Constants;
 import com.example.demo.demos.web.mapper.EcsInfoMapper;
 import com.example.demo.demos.web.service.EcsInfoService;
 import com.example.demo.demos.web.domain.EcsInfo;
+import com.example.demo.demos.web.util.CertUtil;
 import com.example.demo.demos.web.util.DateUtil;
 import com.example.demo.demos.web.util.SMSUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -45,7 +46,7 @@ public class EcsInfoServiceImpl extends ServiceImpl<EcsInfoMapper, EcsInfo> impl
         if (!list.isEmpty()) {
             for (String number : Constants.SEND_MSG_NUMBER) {
                 list.forEach(i -> {
-                    String str  = "{\"name\": \""+i.getSerialNumber()+"\"}";
+                    String str  = "{\"name\": \""+i.getUrl()+"\"}";
                     try {
                         SMSUtil.sendMsg(number,"天目智能科技","SMS_475345133",str);
                     } catch (Exception e) {
@@ -56,4 +57,36 @@ public class EcsInfoServiceImpl extends ServiceImpl<EcsInfoMapper, EcsInfo> impl
             }
         }
     }
+
+    @Override
+    public List<String> crtList() {
+        LambdaQueryWrapper<EcsInfo> wrapper = Wrappers.lambdaQuery();
+        List<EcsInfo> ecsInfos = mapper.selectList(wrapper);
+        List<EcsInfo> updateInfo = new ArrayList<>();
+
+        List<String> list = new ArrayList<>();
+        ecsInfos.forEach(i -> {
+            X509Certificate certificate = CertUtil.getCertificate(i.getUrl());
+            String s = null;
+            if (certificate != null) {
+                s = DateUtil.parseDateToStr(DateUtil.YYYY_MM_DD, certificate.getNotAfter());
+            }
+            if (i.getNotAfter() == null) {
+                EcsInfo ecsInfo = new EcsInfo();
+                ecsInfo.setId(i.getId());
+                if (certificate != null) {
+                    ecsInfo.setNotAfter(certificate.getNotAfter());
+                    updateInfo.add(ecsInfo);
+                }
+            }
+
+            list.add("域名:"+i.getUrl()+",有效期:"+s);
+        });
+
+        if (!updateInfo.isEmpty()){
+            updateInfo.forEach(this::updateById);
+        }
+
+        return list;
+    }
 }

+ 3 - 34
src/main/java/com/example/demo/demos/web/service/impl/EcsServiceImpl.java

@@ -1,9 +1,6 @@
 package com.example.demo.demos.web.service.impl;
 
-import com.example.demo.demos.web.service.EcsInfoService;
 import com.example.demo.demos.web.service.EcsService;
-import com.example.demo.demos.web.domain.EcsInfo;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.net.ssl.HttpsURLConnection;
@@ -14,35 +11,19 @@ import java.security.cert.X509Certificate;
 @Service
 public class EcsServiceImpl implements EcsService {
 
-    @Autowired
-    private EcsInfoService ecsInfoService;
-
     @Override
-    public Certificate getCertificate(String url) {
+    public X509Certificate getCertificate(String url) {
         URL u = null;
         HttpsURLConnection conn = null;
         try {
-            u = new URL(url);
+            u = new URL("https://"+url);
             conn = (HttpsURLConnection) u.openConnection();
             conn.connect();
 
             // 获取服务器证书链
             Certificate[] certificates = conn.getServerCertificates();
             // 通常证书链的第一个证书是服务器证书
-            X509Certificate serverCert = (X509Certificate) certificates[0];
-
-            EcsInfo ecsInfo = getEcsInfo(serverCert);
-            ecsInfoService.save(ecsInfo);
-
-            // 打印证书信息
-//            System.out.println("证书版本: " + serverCert.getVersion());
-//            System.out.println("证书序列号: " + serverCert.getSerialNumber());
-//            System.out.println("颁发给: " + serverCert.getSubjectDN().getName());
-//            System.out.println("颁发者: " + serverCert.getIssuerDN().getName());
-//            System.out.println("证书有效期开始: " + serverCert.getNotBefore());
-//            System.out.println("证书有效期结束: " + serverCert.getNotAfter());
-//            System.out.println("签名算法: " + serverCert.getSigAlgName());
-            return serverCert;
+            return (X509Certificate) certificates[0];
         } catch (Exception e) {
             e.printStackTrace();
         }finally {
@@ -53,16 +34,4 @@ public class EcsServiceImpl implements EcsService {
         return null;
     }
 
-    private static EcsInfo getEcsInfo(X509Certificate serverCert) {
-        EcsInfo ecsInfo = new EcsInfo();
-        ecsInfo.setVersion(String.valueOf(serverCert.getVersion()));
-        ecsInfo.setSerialNumber(String.valueOf(serverCert.getSerialNumber()));
-        ecsInfo.setSubjectDNName(serverCert.getSubjectDN().getName());
-        ecsInfo.setIssuerDNName(serverCert.getIssuerDN().getName());
-        ecsInfo.setNotBefore(serverCert.getNotBefore());
-        ecsInfo.setNotAfter(serverCert.getNotAfter());
-        ecsInfo.setSigAlgName(serverCert.getSigAlgName());
-        return ecsInfo;
-    }
-
 }

+ 33 - 0
src/main/java/com/example/demo/demos/web/util/CertUtil.java

@@ -0,0 +1,33 @@
+package com.example.demo.demos.web.util;
+
+
+import javax.net.ssl.HttpsURLConnection;
+import java.net.URL;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+
+public class CertUtil {
+    public static X509Certificate getCertificate(String url){
+        URL u = null;
+        HttpsURLConnection conn = null;
+        try {
+            u = new URL("https://"+url);
+            conn = (HttpsURLConnection) u.openConnection();
+            conn.connect();
+
+            // 获取服务器证书链
+            Certificate[] certificates = conn.getServerCertificates();
+            // 通常证书链的第一个证书是服务器证书
+            X509Certificate serverCert = (X509Certificate) certificates[0];
+
+            return serverCert;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return null;
+    }
+}