开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 102|回复: 1
收起左侧

[易语言] open SSL证书自签证 修改生效时间和过期时间

[复制链接]
结帖率:74% (14/19)
发表于 2025-7-22 21:03:11 | 显示全部楼层 |阅读模式   山东省菏泽市
14精币
0x6201836AFA17155F1A1F638299AC9C0AD8B751FFC160B604CAA3A5F23A88A7C6F1F02ED874D66DEEC2F2455CBF212A0C9BE02520199EA898E1D823D0DF8807320A4178DC5F055B1BF3B4E541B6A09471DF8E566CC2934C4B05FB53C7873207BBFC3F3B73A080546414C7791E02EBCCF1499ED0A42BE09B2E70FB72C485D98FC1CD6B0C01A7308201A33082014BA003020102020902C4988B79D7000002300F060D2B0601040196640306837D056E30123110300E06035504030C07414230303030313020170D3230313032363038323435355A180F39393939313233313232353935395A301A3118301606035504030C0F42435F465F53544152335F47656E313034300F060D2B0601040196640306837D056E03210017CC7257E5F9DAF4B67025794CA55798839F182B7135CAA47BF5BAF24B80B6B0A3819F30819C3017060D2B0601040196640306837D05650101FF04030401043017060D2B0601040196640306837D056B0101FF0403040100301D0603551D0E0416041449F68BDA9C097C5141AC1F447AA54BF42D0AA362301F0603551D2304183016801480DD4558CC84CC0AC164D518ECA645065B9614363028060D2B0601040196640306837D056C0101FF041431120C0742435F463230360C0742435F46323233300F060D2B0601040196640306837D056E0341004D2D27166EE60BD6251F0ED1D30E63C0ADAEA144E6BD1031A43D6C37A8431ED6FB19B8241F1FDD4196EB23FF49AF62A0FF210B242A9EB696006F877B51967307
这是个证书,把里面的生效时间和过期时间修改一下,谁会


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:59% (13/22)

签到天数: 1 天

发表于 2025-7-25 00:44:10 | 显示全部楼层   浙江省湖州市
修改自签名SSL证书的生效时间和过期时间,核心是**定位证书中的时间字段(UTC格式)并重新编码**,直接修改十六进制数据容易破坏证书结构,更可靠的方式是使用`openssl`工具重新生成符合要求的自签名证书。以下是具体方案:


### 一、直接修改现有证书(适合有经验用户)
你的证书是DER编码格式(十六进制字符串),其中时间字段以`UTCTime`格式存储(如`3230313032363038323435355A`代表`201026082455Z`即2020-10-26 08:24:55 UTC)。

#### 步骤:
1. **将十六进制转为DER文件**:  
   把你的十六进制字符串保存为`cert.hex`,用工具转为DER格式:  
   ```bash
   xxd -r -p cert.hex cert.der  # 十六进制转DER二进制
   ```

2. **查看证书现有时间**:  
   用`openssl`解析证书,确认时间字段位置:  
   ```bash
   openssl x509 -in cert.der -inform der -text -noout
   # 输出中会显示:
   # Not Before: Oct 26 08:24:55 2020 GMT
   # Not After : Dec 31 22:59:59 9999 GMT (你的证书过期时间)
   ```

3. **定位时间字段的十六进制位置**:  
   - 时间在证书中以`17 0D`(UTCTime标签)开头,后跟时间字符串的ASCII十六进制(如`323031303236`对应`201026`)。  
   - 例如你的证书中:  
     - 生效时间:`170D3230313032363038323435355A` → 对应`201026082455Z`(2020-10-26 08:24:55)  
     - 过期时间:`180F39393939313233313232353935395A` → 对应`99991231225959Z`(9999-12-31 22:59:59)

4. **修改时间并重新编码**:  
   - 例如:将生效时间改为`20240101000000Z`,对应十六进制为`32303234303130313030303030305A`,替换原`170D`后的字段。  
   - 将过期时间改为`20301231235959Z`,对应十六进制为`32303330313233313233353935395A`,替换原`180F`后的字段。  
   - 用十六进制编辑器(如HxD)修改`cert.der`,保存后验证:  
     ```bash
     openssl x509 -in cert.der -inform der -text -noout  # 检查时间是否正确
     ```


### 二、用OpenSSL重新生成(推荐,避免格式错误)
直接生成新的自签名证书并指定时间,比修改现有证书更可靠:

#### 1. 生成私钥
```bash
openssl genrsa -out private.key 2048  # 生成2048位私钥
```

#### 2. 生成自签名证书(指定生效/过期时间)
```bash
openssl req -new -x509 -key private.key -out cert.crt \
  -days 3650 \  # 有效期(天),也可直接指定具体时间
  -startdate 240101000000Z \  # 生效时间:YYYYMMDDHHMMSSZ(2024-01-01 00:00:00)
  -enddate 301231235959Z \    # 过期时间:2030-12-31 23:59:59
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/OU=MyDept/CN=example.com"
```
- 参数说明:  
  - `startdate`:生效时间(UTC时区,格式`YYMMDDHHMMSSZ`,年份<50则视为20XX,≥50视为19XX;或用`YYYYMMDDHHMMSSZ`)。  
  - `enddate`:过期时间(格式同上)。  
  - `subj`:证书主题信息(按需修改)。

#### 3. 转换为DER格式(如需十六进制)
如果需要类似你提供的十六进制格式(DER编码):
```bash
openssl x509 -in cert.crt -outform der -out cert.der  # PEM转DER
xxd -p cert.der > cert.hex  # DER转十六进制字符串(即你需要的格式)
```


### 三、关键注意事项
1. **时间格式严格性**:  
   - 必须使用**UTC时间**(结尾带`Z`),格式为`YYMMDDHHMMSSZ`(UTCTime)或`YYYYMMDDHHMMSSZ`(GeneralizedTime)。  
   - 例如:`240101000000Z` → 2024-01-01 00:00:00 UTC;`301231235959Z` → 2030-12-31 23:59:59 UTC。

2. **避免直接修改十六进制**:  
   证书包含签名信息,直接修改时间字段会导致**证书无效**(签名校验失败)。重新生成证书是唯一可靠的方式(自签名证书可重新签名)。

3. **验证证书有效性**:  
   修改/生成后务必用`openssl`验证:  
   ```bash
   openssl x509 -in cert.crt -text -noout  # 检查时间和结构是否正确
   ```


### 总结
推荐用`openssl`重新生成证书并指定`-startdate`和`-enddate`参数,步骤简单且能保证证书有效性。如果必须修改现有证书的十六进制数据,需严格保持时间字段格式和证书结构,修改后必须验证签名(自签名证书可忽略签名校验问题,但其他场景可能失效)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表