首页 文章

“对openssl编程的介绍 . ”文章 . 过期的证书

提问于
浏览
4

我是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下载了源代码 . 问题是证书已过期,我不知道如何创建新的根证书 .

如何创建根证书?如何为客户端和服务器应用程序创建证书?我应该使用哪种加密算法?据我所知,我shuld做以下事情:

  • 创建密钥对 . 秘密和公钥 .

  • 创建证书申请(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“some information about information”

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“some information about information”

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

我不确定这里的“rsa”算法 . 可能是我shuold使用其他algorthm .

所以我有root.pem,server.pem,client.pem我把客户端密钥和证书放到client.pem和server.pem一样 . (与文章样本证书中的方式相同 . )

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

当我把旧的DH文件放到当前文件夹并且服务器启动时 . (dh1024.pem这是什么?)

下一步 . 我启动客户端,我收到另一条错误消息:“Cetrificate不验证 . ”

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

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

有人有想法吗?

2 回答

  • 3

    这是解决方案 . 可能它不是最佳但它有效 . 与问题解决方案的唯一区别是选项:“ - dedes 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
    
  • 1

    由于没有CA证书存在,导致错误代码为20“无法在本地获取颁发者证书” . 客户端和服务器证书都需要由公共CA签名 .

相关问题