zoukankan      html  css  js  c++  java
  • 如何利用OpenSSL生成证书

    此文已由作者赵斌授权网易云社区发布。

    欢迎访问网易云社区,了解更多网易技术产品运营经验。

    一、前言


    最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功能,支持HYTTPS安全加速功能,需要对证书的有效性进行验证,于是乎需要自己生成合法的、非法的、过期的证书。接下来介绍下如何通过OpenSSL生成证书。


    二、使用OpenSSL生成证书


    1. 创建证书密钥文件


    openssl genrsa -des3 -out ca.key 8192

    运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施! 去除key文件口令的命令:


    openssl genrsa -out ca.key 8192

    2.创建证书请求并自签署证书 :


    openssl req -new -x509 -sha256 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Netease/OU=Netease Root CA"各选项(及参数)的意义如下:
    req             使用openssl的req子命令  
    -new            生成新的证书请求  
    -x509           生成自签名证书  
    -days 365      自签名证书的有效期365天(1年)【仅当使用了 -x509 选项后有效】  
    -key ca.key  私钥文件名指定为ca.key【若为运行前就已有的私钥文件且原名不是ca.key,则改名为ca.key;否则新生成的私钥文件命名为ca.key】  
    -out ca.crt     指定输出所生成自签名证书的信息到文件,且文件名为ca.crt【建议不要省略】
    -subj arg
    其中,arg是选项 -subj 的参数,其格式类似于:/type0=value0/type1=value1/type2=... 形式。每一个 /type=value 形式的单元,都对应了一个完整的DN字段。
    DN字段名缩写 说明填写要求
    Country NameC    证书持有者所在国家要求填写国家代码,用2个字母表示
    State or Province NameST    证书持有者所在州或省份填写全称,可省略不填
    Locality NameL    证书持有者所在城市可省略不填
    Organization NameO    证书持有者所属组织或公司可省略不填
    Organizational Unit NameOU    证书持有者所属部门可省略不填
    Common NameCN    证书持有者的通用名必填
    Email Address证书持有者的通信邮箱可省略不填


    三、生成过期证书的简便方法


    1.首先将系统的时间修改超前2年;


    2.执行(二)中第2步时,设置-days为证书的有效期,例如设置为365;


    3.再次将系统时间恢复即可,该证书则为已过期一年。


    四、查看证书


    按照(二)或(三)中的方法生成的证书,点击ca.crt,在常规中即可看到该证书都有效期是从XXX到XXX。按照(二)中的方法即生成的为合法证书;按照(三)中的方法即生成的为过期证书;非法证书的生成即随便输入,不是按照证书的格式,不是如下格式:-----BEGIN CERTIFICATE-----xxx-----END CERTIFICATE-----即可。



           

    免费体验云安全(易盾)内容安全、验证码等服务

    11.1—11.15云计算基础服务全场5折起

    更多网易技术、产品、运营经验分享请点击


    相关文章:
    【推荐】 为何要在网站上设置的验证码

  • 相关阅读:
    form表单为什么不能提交
    遇到了消息堆积,但是问题不大
    面试题:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?
    Dubbo学习地址
    Dubbo入门到实战2
    Dubbo入门到实战
    Mybatis 的三种执行器
    从源码理解Druid连接池原理
    Getting NoSuchMethodError:javax.servlet.ServletContext.getVirtualServerName()
    解决问题:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • 原文地址:https://www.cnblogs.com/163yun/p/9924653.html
Copyright © 2011-2022 走看看