“介绍OpenSSL的节目。”文章。 过期的证书(“an introduction to ope

2019-07-29 01:09发布

我在OpenSSL库和PKI新手。 我有OpenSSL的专家简单的问题。

有谁知道如何这篇文章“介绍OpenSSL的编程(第I / II)”由Eric Rescorla在创建示例代码证书

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

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

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

如何创建根证书? 如何创建客户端和服务器应用程序的证书? 至极加密算法,我应该使用? 据我了解我shuld做到以下几点:

  • 创建密钥对。 秘密和公开密钥。
  • 创建证书请求(P10格式)。
  • 创建自签名根sertificate(X509格式)。

细节是不是从文章中明确。

这是我想创建证书:

1)创建CA私钥和证书请求:openssl的REQ -newkey RSA -keyout ./ca_key.pem out.pem退房手续./ca_req.pem -days 1095 -passin传: “密码” -subj “了一些关于CA的信息” -Extensions v3_ca

2)创建自签署的CA证书的OpenSSL CA -create_serial -in ca_req.pem退房手续root.pem -days 1095 -passin传: “密码” -selfsign -extension v3_ca

3)生成证书openssl的REQ服务器私钥和要求-newkey RSA -keyout server_key.pem出server_req.pem -days 1095 -passin传:“密码” -subj“一些有关服务器的信息”

4)创建服务器certifiate(此证书不是自签署此证书由CA私钥签名)OpenSSL的CA -in server_req.pem -out server.pem -passin传:“密码”

5)产生用于证书的OpenSSL REQ用户私有密钥和请求-newkey RSA -keyout user_key.pem出user_req.pem -days 1095 -passin传递:“密码” -subj“有关客户端的一些信息”

6)创建用户certifiate(此证书不是自签署此证书由CA私钥签名)OpenSSL的CA -in user_req.pem退房手续client.pem -passin传:“密码”

我不知道“RSA”算法在这里。 可能是我shuold使用其他algorthm。

所以,我有root.pem,server.pem,client.pem我把客户端密钥和证书client.pem而对于server.pem同样的事情。 (同样的方式在文章中的示例证书。)

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

当我把老DH文件,当前文件夹和服务器启动。 (dh1024.pem这是什么?)

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

错误代码是20,应将描述为x509_vfy.h码20是“无法获取本地颁发者证书”

所有这一切都意味着,我已经创建的证书不正确。 我不知道该怎么做是正确的。

没有任何人有一个想法?

Answer 1:

这是解决方案。 可能它不是最优的,但它的工作原理。 与问题解决的唯一区别是选项:“-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


Answer 2:

错误代码是20“无法获取本地颁发者证书”是造成的,因为没有CA证书存在。 客户端和服务器证书需要通过共同的一个CA签署。



文章来源: “an introduction to openssl programming.” article. expired certificates