2012-04-19 13 views
4

私はopenSSLライブラリとPKIの初心者です。 私はopenSSLの専門家には簡単な質問があります。 "opensslプログラミング入門"記事。期限切れの証明書

は、誰もがこの記事 でコードサンプルの証明書を作成する方法を知っていますエリックレスコラ

www.rtfm.com/openssl-examples/part1による「OpenSSLのプログラミング(パートI/II)の概要」。 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渡す: "パスワード" -subj "CAに関するいくつかの情報を、" -extensions v3_ca

2) OpenSSLが-create_serial -in ca_req.pem -out root.pemを-days CAの自己署名CA証明書を作成します。 1095 -passin pass: "password" -selfsign -extension v3_ca

3)サーバプライベートキーを生成し、証明書 のopenssl reqを探求-newkey RSA -keyout server_key.pemアウトserver_req.pem -days 1095 -passin渡す: "サーバーに関するいくつかの情報" -subj "パスワード"

4)(この証明書がないサーバーのcertifiateを作成自己署名。 CA秘密鍵で署名し、この証明書) OpenSSLは-in server_req.pem -out server.pem -passin渡しCA: "パスワード"

5)は、ユーザ秘密鍵と証明書の要求を生成する opensslのREQを-newkey RSA -keyout user_key.pem out user_req.pem -days 1095 -passin pass: "password" -subj "クライアントに関する情報"

6)create user certifiate(この証明書は自己署名されていません。 openssl ca -in user_req.pem -out client.pem -passin pass: "password"

"rsa"アルゴリズムについてはわかりません。私は他のalgorthmを使用shuoldかもしれません。

だから私は、私は そしてserver.pemについても同じことをするためにclient.pemクライアントキーと証明書をroot.pemを、server.pem、にclient.pem を入れています。(記事サンプル証明書と同じ方法です)

しかし、これらの新しい生成証明書でサーバーを起動しようとすると、エラーが発生します。 "DHファイルを開けませんでした。"私は現在のフォルダとサーバーが起動に古いDHファイルを置く

。 (それが何であるdh1024.pem?)

次のステップ。私はクライアントを起動し、別のエラーメッセージが表示されます。「証明書は確認しません」

エラーコードがx509_vfy.h内のコード20のための20 Desciptionは、このすべては、私が間違って証明書を作成したことを意味し

「ローカル発行者証明書を取得することができません」です。 私はそれを正しく行う方法を知りません。

誰かがアイデアを持っていますか?

答えて

3

これがソリューションです。 最適ではないかもしれませんが動作します。問題解決の唯一の違いはオプションです: "-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/[email protected] -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/[email protected] 

#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/[email protected] 

#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によって署名される必要があります。

+0

明らかです。私は証明書が期限切れで、新しい証明書が間違っていることを知っています。問題は、正しい証明書、鍵、およびこのようなものをすべて作成する方法です。 – Vlad

+0

@Sauron http://www.herongyang.com/crypto/OpenSSL_Signing_keytool_CSR.html .hopeこのリンクは役立ちます – Balamurugan

関連する問題