• openssl生成pem,密钥证书的创建


    使用OpenSSL生成证书

    首先得安装OpenSSL软件包openssl,安装了这个软件包之后,我们可以做这些事情:
    o Creation of RSA, DH and DSA Key Parameters # 创建密钥 key
    o Creation of X.509 Certificates, CSRs and CRLs # 创建证书
    o Calculation of Message Digests                #
    o Encryption and Decryption with Ciphers # 加密、解密
    o SSL/TLS Client and Server Tests        # SSL 服务器端/客户端测试
    o Handling of S/MIME signed or encrypted Mail # 处理签名或加密了的邮件

    1、生成RSA密钥的方法

    openssl genrsa -des3 -out privkey.pem 2048这个命令会生成一个2048位的密钥,同时有一个des3方法加密的密码,如果你不想要每次都输入密码,可以改成:openssl genrsa -out privkey.pem 2048建议用2048位密钥,少于此可能会不安全或很快将不安全。2、生成一个证书请求

    openssl req -new -key privkey.pem -out cert.csr

    这个命令将会生成一个证书请求,当然,用到了前面生成的密钥privkey.pem文件

    这里将生成一个新的文件cert.csr,即一个证书请求文件,你可以拿着这个文件去数字证书颁发机构(即CA)申请一个数字证书。CA会给你一个新的文件cacert.pem,那才是你的数字证书。


    如果是自己做测试,那么证书的申请机构和颁发机构都是自己。就可以用下面这个命令来生成证书:

    openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095

    这个命令将用上面生成的密钥privkey.pem生成一个数字证书cacert.pem


    3、使用数字证书和密钥

    有了privkey.pem和cacert.pem文件后就可以在自己的程序中使用了,比如做一个加密通讯的服务器


    -------------

    OpenSSL建立自己的CA

    (1) 环境准备

    首先,需要准备一个目录放置CA文件,包括颁发的证书和CRL(Certificate Revoke List)。
    这里我们选择目录 /opt/ca。

    然后我们在/opt/ca下建立两个目录,certs用来保存我们的CA颁发的所有的证书的副本;private用来保存CA证书的私钥匙。

    CA的私钥匙很重要,至少需要2048位长度。建议保存在硬件里,或者至少不要放在网络中。
    除了生成钥匙,在我们的CA体系中还需要创建三个文件。第一个文件用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01。第二个文件是一个排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空。

    $ mkdir /opt/myca
    $ cd /opt/myca
    $ mkdir certs private
    $ chmod g-rwx,o-rwx private
    $ echo "01" > serial
    $ touch index.txt

    第三个文件是OpenSSL的配置文件,创建起来要棘手点。示例如下:

    [ ca ]
    default_ca = myca

    [ myca ]
    dir = /opt/myca
    certificate = $dir/cacert.pem
    database = $dir/index.txt
    new_certs_dir = $dir/certs
    private_key = $dir/private/cakey.pem
    serial = $dir/serial

    default_crl_days= 7
    default_days = 365
    default_md = md5

    policy = myca_policy
    x509_extensions = certificate_extensions

    [ myca_policy ]
    commonName = supplied
    stateOrProvinceName = supplied
    countryName = supplied
    emailAddress = supplied
    organizationName= supplied
    organizationalUnitName = optional

    [ certificate_extensions ]
    basicConstraints= CA:false

    我们需要告诉OpenSSL配置文件的路径,有两种方法可以达成目的:通过config命令选项;通过环境变量OPENSSL_CONF。这里我们选择环境变量的方式。

    $ OPENSSL_CONF="/opt/myca/openssl.cnf"
    $ export OPENSSL_CONF

    (2) 生成根证书(Root Certificate)

    我们需要一个证书来为自己颁发的证书签名,这个证书可从其他CA获取,或者是自签名的根证书。这里我们生成一个自签名的根证书。

    首先我们需要往配置文件里面添加一些信息,如下所示,节名和命令行工具的命令req一样。我们把所有必要的信息都写进配置,而不是在命令行输入,这是唯一指定X.509v3扩展的方式,也能让我们对如何创建根证书有个清晰的把握。

    [ req ]
    default_bits = 2048
    default_keyfile = /opt/myca/private/cakey.pem
    default_md = md5
    prompt = no
    distinguished_name = root_ca_distinguished_name
    x509_extensions = root_ca_extensions
    [ root_ca_distinguished_name ]
    commonName = My Test CA
    stateOrProvinceName = Beijing
    countryName = CN
    emailAddress = yingyuan@staff.sina.com.cn
    organizationName = Root Certification Authority
    [ root_ca_extensions ]
    basicConstraints = CA:true

    万事俱备,我们可以生成根证书了。注意设置好环境变量OPENSSL_CONF。

    $ openssl req -x509 -newkey rsa -out cacert.pem -outform PEM

    验证一下我们生成的文件。

    $ openssl x509 -in cacert.pem -text -noout

    (3) 给客户颁发证书

    在给客户颁发证书之前,需要客户提供证书的基本信息。我们另外开启一个终端窗口,使用默认的OpenSSL配置文件(不要让之前的OPENSSL_CONF干扰我们,那个配置是专门用来生成根证书的)。

    命令和我们生成根证书的类似,都是req,不过需要提供一些额外的信息。如下:

    $ openssl req -newkey rsa:1024 -keyout testkey.pem -keyform PEM -out testreq.pem -outform PEM

    有两次提示要口令,第一次的口令用来加密私钥匙testkey.pem,第二次口令一般被OpenSSL忽略。
    结果生成两个文件:testkey.pem,私钥匙;testreq.pem,请求信息,其中包括公钥匙。

    我们来看看testreq.pem都有哪些信息?

    $ openssl req -in testreq.pem -text -noout

    现在,我们可以把testreq.pem提交给我们的CA生成证书了。
    为了方便起见,我们假定testreq.pem在/opt/myca/private/中。

    $ openssl ca -in testreq.pem

    有三次提示,一次是问你CA的私钥匙密码,两次是确认,输出的结果就是为客户颁发的证书。
    可以通过batch选项取消命令提示,可通过notext选项取消证书的输出显示。
    此外,还可以一次给多个客户颁发证书,方法是用 infiles选项替换in选项,不过这个选项必须放在最后,因为此后的任何字符均被处理为文件名称列表。

    生成的证书放在certs目录,同时index.txt和serial的内容都发生了改变。

    (4) 吊销证书

    吊销证书的操作很简单,我们将待吊销的证书从证书的保存位置拷贝到另外一个目录,然后运行ca命令就可以。
    主要设置好OPENSSL_CONF环境变量。

    $ cp certs/01.pem testcert.pem
    $ openssl ca -revoke testcert.pem

    输入CA私钥匙的密码就可以。

    为了使你的吊销操作让别人知道,你可以生成CRL(Certificate Revoke List),然后公布到网上去。
    由于每个颁发的证书都有一个过期时间,一旦证书过期了,就可以把该证书从CRL中删除。因为这时候在不在CRL中已经无所谓了。

    # 生成CRL列表
    $ openssl ca -gencrl -out exampleca.crl

    # 查看CRL列表信息
    $ openssl crl -in exampleca.crl -text -noout

    # 验证CRL列表签名信息
    $ openssl crl -in exampleca.crl -noout -CAfile cacert.pem

    可以看到CRL的版本号为1,这是OpenSSL默认的,除非crl_extensions被指定在配置文件ca一节中。

  • 相关阅读:
    位运算
    LeetCode(230):二叉树中的第K小元素
    LeetCode(69):二分法求平方根
    TCP如何保证传输可靠性
    2种方法(递归+BFS)求二叉树的最小/最大深度
    自动生成Mapper文件(基于Mybatis Maven插件)
    Git的使用
    Java关键字及其作用详解
    Vagrant安装Centos/7
    java servlet 几种页面跳转的方法及传值
  • 原文地址:https://www.cnblogs.com/riasky/p/3473512.html
Copyright © 2020-2023  润新知