zoukankan      html  css  js  c++  java
  • openssl自签名证书生成与单双向验证

    什么是CA:

    CA(Certificate Authority)是数字证书认证中心的简称。是指发放、管理、废除数字证书的机构。

    CA的作用是检查证书持有者身份的合法性。并签发证书(在证书上签字),以防证书被伪造或篡改。以及对证书和密钥进行管理。

    SSL证书中DN(Distiguish Name)识别名的结构:

            遵循x.500标准,标识名的目的就是为每一个网络实体提供一个唯一的名字。为了达到这一目的。DN有一种分层结构。一个DN由一些列的RDN(Relative distinguished name,相对标识名)构成。

            RDN的乘此结构依次为:

    C = US, ST = Beijing, L = Beijing, O = RTFM, OU = Consulting, CN = Eric

    (C->Country, ST-> State or Provice Name, L->Locality Name, O->Organization, OU->Organization Unit, CN->Common Name)

     

    生成自签名证书的步骤:

    一、建立CA

    1. 在随意目录建立目录,目录名称随意

    /home/gouxu/gx/key/

    2. 进入到新建立的目录key

    cd /home/gouxu/gx/key/

    3. 生成CA私钥

    openssl genrsa -out ca.key 2048

    參数说明:

    genrsa:生成rsa秘钥;

    -out ca.key 生成的秘钥文件为ca.key;

    2048: 秘钥长度为2048.

    4. 用CA私钥生成CA的证书

    openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=Teamsun"

    (-x509选项会生成自签名证书。)

    5. 建立CA对应文件夹

    进入到key目录运行例如以下命令:

    mkdir demoCA

    cd demoCA/

    mkdir newcerts

    touch index.txt

    echo '01' > serial

    二、生成server端证书

    1. 进入key目录

    cd key/

    2. 生成server私钥

    openssl genrsa -out server.key 2048

    3. 使用server私钥生成server端证书请求文件

    openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guoxu/CN=guoxu"

    (没有-x509选项则生成证书请求文件。)

    4. 使用server证书请求文件通过CA生成自签名证书

    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

    5. 验证server证书

    gouxu@gouxu-pc:~/gx/key$ openssl verify -CAfile ca.crt server.crt 

    server.crt: OK

    gouxu@gouxu-pc:~/gx/key$ 

    三、双向认证须要生成client证书

    1. 进入key目录

    cd key/

    2. 生成client私钥

    openssl genrsa -out client.key 2048

    3. 使用client私钥生成client端证书请求文件

    openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guog/CN=guog"

    注意:假设出现例如以下错误须要更改OU域与CN域又一次生成证书请求文件。

    Sign the certificate?

     [y/n]:y

    failed to update database

    TXT_DB error number 2

    4. 使用client证书请求文件生成自签名证书

    openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

    5. 验证client证书

    gouxu@gouxu-pc:~/gx/test$ openssl verify -CAfile ca.crt client.crt 

    client.crt: OK

    gouxu@gouxu-pc:~/gx/test$

    四、測试

    4.1 使用server证书測试单向认证

    1. 打开窗体1启动server

    gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt 

    Using default temp DH parameters

    Using default temp ECDH parameters

    ACCEPT

    2. 打开窗体2启动client

    gouxu@gouxu-pc:~$ openssl s_client -connect localhost:10001

    CONNECTED(00000003)

    ... ...

    3. 连接成功后在随意一个窗体输入字符串会传输到另外一个窗体回显。

    4.2 使用server证书和client证书做双向測试

    1. 打开窗体1启动server

    (带有Verify參数,强制要求client证书)

    gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt -Verify 5

    2. 打开窗体2启动client

    gouxu@gouxu-pc:~/gx/test$ openssl s_client -connect localhost:10001 -cert client.crt -key client.key 

    3. 双向证书正确则连接成功。否则连接失败。

    4. 通过控制台能够双向发送消息。

  • 相关阅读:
    Linux-进程描述(1)—进程控制块
    C++中的继承(2)类的默认成员
    Linux系统date命令的参数及获取时间戳的方法
    new/new[]和delete/delete[]是如何分配空间以及释放空间的
    golang垃圾回收
    golang内存分配
    go中的关键字-reflect 反射
    go中的关键字-go(下)
    go中的关键字-go(上)
    go中的关键字-defer
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7065152.html
Copyright © 2011-2022 走看看