• 密钥、证书原理与创建


    一、公私钥

    公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

    二、证书和密钥关系

    证书用于管理公钥。(公钥要公开。如何避免公钥被替换或损毁,引入了证书。)

    私钥在服务器端,公钥一般在证书中(证书可以简单理解就是    比较安全防篡改的私钥)

    比方

    证书好比身份证(公钥+姓名+数字签名)。

    证书机构(CA)好比公安局,负责管理和分发身份证。

    证书内容

    证书实际上是对于非对称加密算法来说的,一般证书包括公钥、姓名、数字签名三个部分。

    CA登记 HASH(公钥+姓名) 标识唯一性,也就是证书里的数字签名。

    甲方 发送数据给 乙方,去CA查找乙方的身份证书,上面有乙方的信息,可以保证公钥就是乙方的。然后把要加密的信息进行加密 给乙方。

    三、生成证书的步骤与原理

    生成证书的标准流程:

    1.生成自己的私钥文件(.key)

    2.基于私钥生成证书请求文件(.csr)

    3.将证书请求文件(.csr)提交给证书颁发机构(CA),CA会对提交的证书请求中的所有信息生成一个摘要,然后使用CA根证书对应的私钥进行加密,这就是所谓的“签名”操作,完成签名后就会得到真正的签发证书(.cer或.crt)

    4.用户拿到签发后的证书,可能需要导入到自己的密钥库中,如Java的keystore,或根据需要再进行各种格式转换(.pem .p12 .jks等等)

    四、生成自签名证书

    步骤:

    1.创建私钥(.key)

    openssl genrsa -out my.key 2048

    2.基于私钥(.key)创建证书签名请求(.csr)

    openssl req -new -key my.key -out my.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

    参数:

    /C= Country 国家

    /ST= State or Province 省

    /L= Location or City 城市

    /O= Organization 组织或企业

    /OU= Organization Unit 部门

    /CN= Common Name 域名或IP

    3. 使用自己的私钥(.key)签署自己的证书签名请求(.csr),生成自签名证书(.crt)

    openssl x509 -req -in my.csr -out my.crt -signkey my.key -days 3650

    对于这条命令,要注意以下几点:

    这个命令是openssl x509,-req是参数,和前面生成证书签名请求的openssl req命令不同。

    -signkey my.key配置清晰地表明使用自己的私钥进行签名。

    注:1-2步可以用一条命令生成

    openssl req -new -newkey rsa:2048 -nodes -keyout my.key -out my.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

    1-3步也可以用一条命令生成

    openssl req -x509 -newkey rsa:2048 -nodes -keyout my.key -out my.crt -days 3650  -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

    五、生成私有CA签名证书

    与生成自签名证书不同地方在于,生成自签名证书场景下只有一个参与方,请求证书和签发证书都是自己,而生成私有CA证书的场景里两个角色:

    签发证书的一方:CA(主要牵涉的是CA私钥和根证书)

    请求签发证书的一方:如服务器

    为了变于区别,我们把它相关的文件分别用ca和server加以区别

    步骤:

    1. 生成CA私钥(ca.key)和CA自签名证书(ca.crt)
    openssl req -x509 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt -days 3650  -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2" 

    (此步骤和生成自签名中简化1-3步的命令一致)

    注:私有CA证书其实就是一个普通的自签名证书

    1. 生成Server端私钥(server.key)和证书签名请求(server.csr)
    openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

    (此步骤和生成自签名中简化1-2步的命令一致)

    1. 使用CA证书(ca.crt)与密钥(ca.key)签署服务器的证书签名请求(server.csr),生成私有CA签名的服务器证书(server.crt)
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
    1. 验证证书是否创建无误
    openssl verify -CAfile ca.crt server.crt

    注:证书生成的文件如果直接vim查看是乱码,可以输入命令查看证书内容

    openssl x509 -in ca.crt -noout -text

    openssl x509 -in server.crt -noout -text

  • 相关阅读:
    层次分析法(matlab实现)
    【C++航海王:追寻罗杰的编程之路】string类
    android 点9记录
    C# --- 坦克大战开发 --- 绘制游戏界面
    爬虫之re数据清洗
    (二十八)mmdetection实用工具: Visualization
    FTP客户端可以发送哪些请求
    51单片机DAC数模转换
    二叉树递归套路总结
    【3】Docker镜像相关命令
  • 原文地址:https://blog.csdn.net/qq_41937509/article/details/126957929