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からソース コードをダウンロードしました。 問題は、証明書の有効期限が切れており、新しいルート証明書を作成する方法がわからないことです。

ルート証明書を作成するには? クライアント アプリとサーバー アプリの証明書を作成するにはどうすればよいですか? どの暗号化アルゴリズムを使用すればよいですか? 私が理解している限り、次のことを行う必要があります。

  • キーペアを作成します。秘密鍵と公開鍵。
  • 証明書要求を作成します (p10 形式)。
  • 自己署名ルート証明書 (x509 形式) を作成します。

詳細は記事から明らかではありません。

これは私が証明書を作成しようとしている方法です:

1) CA 秘密鍵と証明書要求の作成: openssl req -newkey rsa -keyout ./ca_key.pem out.pem -out ./ca_req.pem -days 1095 -passin pass:"password" -subj "some information about CA" -拡張 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 server"

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 client"

6) ユーザー証明書を作成します (この証明書は自己署名されていません。この証明書は CA 秘密鍵によって署名されています) openssl ca -in user_req.pem -out client.pem -passin pass:"password"

ここで「rsa」アルゴリズムについてはわかりません。他のアルゴリズムを使用する必要があるかもしれません。

だから私はroot.pem、server.pem、client.pemを持っていますクライアントキーと証明書をclient.pemに置き、server.pemについても同じです。(記事のサンプル証明書と同じ方法です。)

しかし、これらの新しく生成された証明書を使用してサーバーを起動しようとすると、「DH ファイルを開けませんでした」というエラーが表示されます。

古い DH ファイルを現在のフォルダーに配置すると、サーバーが起動します。(dh1024.pem って何?)

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

エラー コードは 20 です。x509_vfy.h のコード 20 の説明は、「発行者証明書をローカルで取得できません」です。

これはすべて、証明書を間違って作成したことを意味します。正しく行う方法がわかりません。

誰かアイデアがありますか?

4

2 に答える 2

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/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
于 2012-06-08T13:48:24.360 に答える
1

エラー コード 20「ローカルで発行者証明書を取得できません」は、CA 証明書が存在しないために発生します。クライアント証明書とサーバー証明書の両方が、共通の CA によって署名される必要があります。

于 2012-05-09T10:09:09.003 に答える