如何在命令行中指定自签名证书的起始日期与结束日期?
单条OpenSSL命令生成自定义自签名证书
刚好我之前也折腾过类似的需求,给你整理了一个完整的单条命令解决方案,能一次性搞定证书主体信息、自定义扩展(比如SAN)和有效期起止日期,还修复了你原来命令里重复-subj的问题:
openssl req -x509 -sha256 -key /tmp/server.key -out /tmp/server.crt \ -subj "/C=US/ST=CA/O=Acme Inc./CN=192.168.56.101" \ -extensions SAN -config <(printf "[req]\ndistinguished_name=dn\n[dn]\n[SAN]\nsubjectAltName=DNS:ottavio.com,DNS:www.ottavio.com") \ -days 365 -startdate 20240101000000Z
各参数说明:
-x509:告诉OpenSSL直接生成自签名证书,而非证书签名请求(CSR)-sha256:用更安全的SHA-256哈希算法替代SHA-1(SHA-1已被淘汰,不建议再使用)-key /tmp/server.key:指定你已生成好的私钥路径;如果还没有私钥,可以看下面的「一步到位版本」-out /tmp/server.crt:输出最终证书的路径-subj "...":填写证书的主体信息,格式为/C=国家代码/ST=州/O=组织名/CN=通用名称,可按需调整字段-extensions SAN:指定要启用的扩展段,对应后面临时配置里的[SAN]区块-config <(printf "..."):用临时生成的配置片段定义SAN扩展,无需单独编写配置文件-days 365:证书的有效天数,结束日期=起始日期+该天数-startdate 20240101000000Z:自定义证书起始日期,格式为YYYYMMDDHHMMSSZ(Z代表UTC时区);不需要自定义的话直接去掉该参数,默认从当前时间开始
生成私钥+证书的一步到位版本:
如果还没有现成的私钥,可以把生成私钥和证书合并成一条命令:
openssl req -x509 -sha256 -newkey rsa:2048 -nodes -keyout /tmp/server.key -out /tmp/server.crt \ -subj "/C=US/ST=CA/O=Acme Inc./CN=192.168.56.101" \ -extensions SAN -config <(printf "[req]\ndistinguished_name=dn\n[dn]\n[SAN]\nsubjectAltName=DNS:ottavio.com,DNS:www.ottavio.com") \ -days 365 -startdate 20240101000000Z
新增参数说明:
-newkey rsa:2048:生成2048位RSA私钥(安全性足够日常使用)-nodes:生成的私钥不加密;如果需要加密私钥,去掉该参数即可,系统会提示设置密码
小提示:
- SAN扩展支持多种类型条目,比如要添加IP地址,可改成
subjectAltName=DNS:ottavio.com,DNS:www.ottavio.com,IP:192.168.56.101 - 嫌换行麻烦的话,去掉所有反斜杠
\,把命令写成一行也能正常执行
内容的提问来源于stack exchange,提问作者Ottavio Campana
相关产品推荐
相关产品推荐

