利用Openssl自签名证书生成与单双向认证通信

    技术2024-07-21  73

    文章目录

    1.什么是CA?2.如何生成证书2.1生成CA key 3.生成服务器私钥/证书4.生成客户端私钥/证书5.测试

    1.什么是CA?

    1.CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。 2.CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

    2.如何生成证书

    2.1生成CA key

    1.首先随意创建一个文件夹 2.在当前文件夹下输入命令:openssl genrsa -out ca.key 2048

    (参数说明): 1.genrsa:生成rsa秘钥; 2.out ca.key 生成的秘钥文件为ca.key; 3.2048: 秘钥长度为2048.

    3.用CA私钥生成CA的证书,输入命令openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=YUNNAN/L=YUNNAN/O=LOK/OU=LOK 这一步可以用openssl req -new -x509 -days 36500 -key ca.key -out ca.crt(之后会需要在提示之下输入许多信息,包括国家代码,省份,城市,公司机构名等) (-x509选项会生成自签名证书。)

    3.生成服务器私钥/证书

    1.生成server端的key

    openssl genrsa -out server.key 2048

    2.使用key生成server端证书请求文件

    openssl req -new -key server.key -out server.csr

    (与之前不用的是这里没有-x509选项则生成证书请求文件。) 3.使用server证书请求文件通过CA生成自签名证书

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

    执行这里的时候可能会出现错误,网上也有相应的解决办法,这里我们用

    mkdir -p ./demoCA/newcerts //当前路径下创建这两个文件夹 touch ./demoCA/index.txt //创建index.txt文件 touch ./demoCA/serial //创建serial文件 echo '01' > ./demoCA/serial //在serial文件中写入“01”

    进行解决。

    4.生成客户端私钥/证书

    与之前服务器步骤相同 1.首先生成key

    openssl genrsa -out client.key 2048

    2.使用key生成client端证书请求文件 openssl req -new -key client.key -out client.csr

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

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

    5.测试

    A。单向认证 打开窗口1服务器端输入:

    openssl s_server -accept 10001 -key server.key -cert server.crt

    结果:

    Enter pass phrase for 1.key: Using default temp DH parameters ......

    打开窗口2客户端 输入:

    openssl s_client -connect localhost:10001

    结果:

    Enter pass phrase for 2.key: CONNECTED(00000003) depth=1 C = CN, ST = YJN, L = YN, O = YN, OU = YN ... ...

    这时出现窗口来进行双方的传输。

    B双向认证 1.服务器窗口1发送:(带有Verify参数,强制要求client证书)

    openssl s_server -accept 10001 -key server.key -cert server.crt -Verify 1

    输出:

    verify depth is 1, must return a certificate Enter pass phrase for server.key: Using default temp DH parameters ......

    2.客户端窗口2发送:

    openssl s_client -connect localhost:10001 -cert client.crt -key client.key

    输出:

    Enter pass phrase for client.key: CONNECTED(00000003) .....

    若验证成功则可以在窗口发现信息.

    Processed: 0.017, SQL: 9