security - "an introduction to openssl programming."文章。过期证书

标签 security openssl ssl-certificate x509

我是 openSSL 库和 PKI 的新手。
我对 openSSL 专家有一个简单的问题。

有谁知道如何为本文中的代码示例创建证书
Eric Rescorla 的“OpenSSL 编程简介(第 I/II 部分)”

www.rtfm.com/openssl-examples/part1.pdf

www.rtfm.com/openssl-examples/part2.pdf

我已经从 http://www.rtfm.com/openssl-examples 下载了源代码
问题是证书已过期,我不知道如何创建新的根证书。

如何创建根证书?如何为客户端和服务器应用程序创建证书?我应该使用哪种加密算法?
据我了解,我应该执行以下操作:

  • 创建 key 对。 key 和公钥。
  • 创建证书请求(p10 格式)。
  • 创建自签名根证书(x509 格式)。

  • 文章中的细节不清楚。

    这就是我尝试创建证书的方式:

    1)创建CA私钥和证书请求:
    openssl req -newkey rsa -keyout ./ca_key.pem out.pem -out ./ca_req.pem -days 1095 -passin pass:"password"-subj "一些关于 CA 的信息"-extensions v3_ca

    2) 创建自签名 CA 证书
    openssl ca -create_serial -in ca_req.pem -out root.pem -days 1095 -passin pass:"password"-selfsign -extension v3_ca

    3)生成服务器私钥并请求证书
    openssl req -newkey rsa -keyout server_key.pem out server_req.pem -days 1095 -passin pass:"password"-subj "一些关于服务器的信息"

    4)创建服务器证书(此证书不是自签名的。此证书由 CA 私钥签名)
    openssl ca -in server_req.pem -out server.pem -passin pass:"password"

    5)生成用户私钥并请求证书
    openssl req -newkey rsa -keyout user_key.pem out user_req.pem -days 1095 -passin pass:"password"-subj "一些关于客户端的信息"

    6)创建用户证书(此证书不是自签名的。此证书由 CA 私钥签名)
    openssl ca -in user_req.pem -out client.pem -passin pass:"password"

    我不确定这里的“rsa”算法。可能是我应该使用其他算法。

    所以我有 root.pem、server.pem、client.pem
    我将客户端 key 和证书放入 client.pem
    server.pem 也是如此。 (与文章样本证书中的方式相同。)

    但是,当我尝试使用这些新生成的证书启动服务器时,出现错误:
    “无法打开 DH 文件。”

    当我将旧 DH 文件放入当前文件夹并启动服务器时。
    (dh1024.pem 是什么?)

    下一步。我启动客户端并收到另一条错误消息:“证书未验证。”

    错误代码为 20。x509_vfy.h 中代码 20 的说明为“无法在本地获取颁发者证书”

    所有这些都意味着我错误地创建了证书。
    我不知道如何正确地做到这一点。

    有人有想法吗?

    最佳答案

    这就是解决方案。
    可能它不是最佳的,但它有效。与问题解决方案的唯一区别是选项:“-des3 1024”

    #!/bin/sh
    
    alg="rsa"
    
    ossl="openssl"
    
    passwd="password"
    
    #certificate autority folder
    caFolder="./demoCA"
    
    #delete old certificates, CA folder and keys 
    rm -rf *.pem
    
    rm -rf $caFolder
    
    #create folder structure
    mkdir $caFolder
    mkdir "$caFolder/private"
    mkdir "$caFolder/newcerts"
    
    #generate RSA private key for CA
    $ossl genrsa -out ca_key.pem 1024
    
    #Creating certificate request:
    $ossl req -new -key ca_key.pem -out ./ca_req.pem -days 1095 -passin pass:$passwd  -passout pass:$passwd \
    -subj /C=RU/ST=Moscow/L=Moscow/O=company/OU=TestCAs/CN=TestCA/emailAddress=TestCA@company.ru -extensions v3_ca
    
    cp ca_key.pem "$caFolder/private/cakey.pem" 
    
    touch "$caFolder/index.txt"
    
    #Create self signed CA certificate 
    $ossl ca -create_serial -in ca_req.pem -out ca_cert.pem -days 1095 -passin pass:$passwd -selfsign -extensions v3_ca -notext
    cp ca_cert.pem "$caFolder/cacert.pem"
    
    
    #generate SERVER private key and request for certificate 
    $ossl genrsa -out server_key.pem -passout pass:$passwd -des3 1024
    
    $ossl req -new -key server_key.pem  -passin pass:$passwd \
    -passout pass:$passwd -out server_req.pem -days 1095 \
    -subj /C=RU/ST=Moscow/L=Moscow/O=company/OU=SSLServers/CN=localhost/emailAddress=SSLServer@company.ru  
    
    #create SERVER certifiate (this certificate is not self signed. This certificate signed by CA private key)
    $ossl ca -in server_req.pem -out server_cert.pem -passin pass:$passwd -notext
    
    
    #generate RSA private key for client
    $ossl genrsa -out user_key.pem -passout pass:$passwd -des3 1024
    
    #generate request certificate for client
    $ossl req -new -key user_key.pem -out user_req.pem -days 1095 \
    -passin pass:$passwd -passout pass:$passwd \
    -subj /C=RU/ST=Moscow/L=Moscow/O=company/OU=Clients/CN=Client/emailAddress=Client@company.ru 
    
    #create user certifiate (this certificate is not self signed. This certificate signed by CA private key) 
    $ossl ca -in user_req.pem -out user_cert.pem -passin pass:$passwd -notext
    
    #generate  DH   param
    $ossl dhparam -out dh1024.pem 1024
    
    cat ./user_key.pem ./user_cert.pem > client.pem  
    
    cat ./server_key.pem  ./server_cert.pem  > server.pem
    
    cp ./ca_cert.pem root.pem
    

    关于security - "an introduction to openssl programming."文章。过期证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224127/

    相关文章:

    c++ - 二进制比较以证明客户端正在使用我们的 C++/CLI 库

    security - 在重定向到 HTTPS 之前,HTTP 请求 header 是否可保护?

    ssl - 使用 SSL 的 Mosquitto,为什么要生成 .csr?

    Wordpress/站点运行状况/REST API 错误/环回错误

    android - 间歇性对等未验证异常 : No peer certificate with Android client

    node.js - 如何将 NPM 配置为信任防火墙颁发者以进行 HTTPS 代理?

    java - 无法连接到 ssl 服务器收到致命警报 : certificate_unknown and ReadDataRecord(SSLSocketImpl

    security - Paypal SSL VeriSign G5 根证书和未找到受信任的证书

    security - 如何限制对部署在 Tomcat 中的 Web 应用程序中的特定文件的访问?

    android - Google Play 和 OpenSSL 漏洞警告