openSSLで秘密鍵ファイルエラー

このQ&Aのポイント
  • Solaris10で、OpenSSLとApacheを導入し、認証ファイル作成でエラーが発生しました。
  • 認証局ファイルの作成(CA.sh -newca)でunknown option -selfsignというエラーが表示されます。
  • 証明書署名要求ファイルの作成(CA.sh -newreq)で、openssl rsaコマンドがエラーで実行されません。unable to load Private Keyというエラーメッセージが表示されました。
回答を見る
  • ベストアンサー

openSSLで秘密鍵ファイルエラー

はじめまして。 Solaris10で、OpenSSLとApacheを導入し、認証ファイル作成で エラーになりました。 認証局ファイル作成(CA) cd /usr/local/ssl/misc/CA.sh -newca Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: unknown option -selfsign usage: ca args -verbose - Talk alot while doing things -config file - A config file -name arg - The particular CA definition to use -gencrl - Generate a new CRL -crldays days - Days is when the next CRL is due -crlhours hours - Hours is when the next CRL is due -startdate YYMMDDHHMMSSZ - certificate validity notBefore -enddate YYMMDDHHMMSSZ - certificate validity notAfter (overrides -days) -days arg - number of days to certify the certificate for -md arg - md to use, one of md2, md5, sha or sha1 -policy arg - The CA 'policy' to support -keyfile arg - private key file -keyform arg - private key file format (PEM or ENGINE) -key arg - key to decode the private key if it is encrypted -cert file - The CA certificate -in file - The input PEM encoded certificate request(s) -out file - Where to put the output file(s) -outdir dir - Where to put output certificates -infiles .... - The last argument, requests to process -spkac file - File contains DN and signed public key and challenge -ss_cert file - File contains a self signed cert to sign -preserveDN - Don't re-order the DN -noemailDN - Don't add the EMAIL field into certificate' subject -batch - Don't ask questions -msie_hack - msie modifications to handle all those universal strings -revoke file - Revoke a certificate (given in file) -subj arg - Use arg instead of request's subject -extensions .. - Extension section (override value in config file) -extfile file - Configuration file with X509v3 extentions to add -crlexts .. - CRL extension section (override value in config file) -engine e - use engine e, possibly a hardware device. -status serial - Shows certificate status given the serial number -updatedb - Updates db for expired certificates もしかして、上記でエラーですか? 次に、証明書署名要求ファイル作成(CSR) cd /usr/local/ssl/misc/CA.sh -newreq openssl req -in newreq.pem -text →確認したらOKでした。 openssl rsa -in newreq.pem -text 確認した所、エラーになります。 unable to load Private Key 18943:error:0906D06C:PEM routines:PEM_read_bio:no start line:/on10/build-nd/F10U8B6/usr/src/common/openssl/crypto/pem/pem_lib.c:637:Expecting: ANY PRIVATE KEY Googleで、調べているんですが、よくわかりません。 ご存知の方がいたら、教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#227025
noname#227025
回答No.5

> 少し混乱してきまして、確認させてください。 > 私は、以下の方法で、認証ファイル作成しています。 確認させてもらいたいのですが、質問当初の問題「openSSLで秘密鍵ファイルエラー」は解決したということでよいのでしょうか? また、何をどう混乱しているのか簡潔に書いて下さい。 だらだらと質問者が行った方法を書くだけでは、回答者の負担が増してしまい、有効な回答が得られにくくなってしまいますよ。 ざっと質問者が行った方法を確認したが、CSR について認識違いがあるように思います。 openssl req -in newreq.pem -text 上記コマンドを実行した出力をみても分かるとおり、CSR に含まれるのは公開鍵です。 newreq.pem(CSR) : 公開鍵 newcert.pem(CRT) : 公開鍵 + CA の署名 newkey.pem: key pair(公開鍵 + 秘密鍵) CSR は、CSR に対して CA に署名してもらい CRT を発行してもらうためだけにあるので、CRT を発行してもらった後は不要になります。 必要なのは公開鍵が含まれている CA が発行した CRT(newcert.pem)と対応する秘密鍵が含まれている newkey.pem です。 以上のことを踏まえると、以下の CRL に対する処理は明らかに不要ですよね。 > cp /usr/local/ssl/misc/newreq.pem /usr/local/apache2/conf/ssl > SSLCertificateKeyFile /usr/local/apache2/conf/ss/newreq.pem 一方、newkey.pem については何も処理していませんが... 落ち着いてよく考えてみましょう。

hironona
質問者

お礼

xinuさん、 質問者側として、明確でなくまた、だらだらと質問して しまって申し訳ありません。 一応、openSSLで秘密鍵ファイルエラーに関しては、 解決しました。これによってまた、エラーを起こしているので 新たに、質問します。 ありがとうございました。

その他の回答 (5)

noname#227025
noname#227025
回答No.6

No.5 に typo があったので訂正します。 (誤) > 以上のことを踏まえると、以下の CRL に対する処理は明らかに不要ですよね。 (正) 以上のことを踏まえると、以下の CSR に対する処理は明らかに不要ですよね。

  • entree
  • ベストアンサー率55% (405/735)
回答No.4

まず、 > cd /usr/local/ssl/misc/CA.sh -newca -bash: cd: /usr/local/share/ssl/misc/CA.sh: ディレクトリではありません。 になりますよ? CA.sh の reqnew の部分はこんな感じですね。 $REQ -new -keyout newkey.pem -out newreq.pem $DAYS newkey.pem : キーペアファイル newreq.pem : CSRファイル なので、中身を見るには openssl req -in newreq.pem -text openssl rsa -in newkey.pem -text 余談ですが、もしどこかを参照されているのであればそこのリンクも 張ってあった方が回答しやすいです。

noname#227025
noname#227025
回答No.3

# 何度もすみません。 > このままだと CA の証明書ができていないので、この CA で証明書要求に署名できませんよ。 No.2 で上記のように書きましたが、訂正します。 このままだと CA の証明書ができていないので、証明書の verify ができない。(CA.sh -verify) でした。

hironona
質問者

補足

xinuさん、 助言ありがとうございます。 少し混乱してきまして、確認させてください。 私は、以下の方法で、認証ファイル作成しています。 同梱のCA.shを使う 認証局ファイル作成 /usr/local/ssl/misc./CA.sh -newca CAの自己署名型証明書  demoCA/cacert.pem CAの秘密鍵  demoCA/private/cakey.pem 証明書署名要求ファイル作成(CSR) /usr/local/ssl/misc/CA.sh -newreq 証明書要求ファイル newreq.pem 証明書署名要求ファイル確認 openssl req -in newreq.pem -text 秘密鍵ファイル確認 openssl rsa -in newkey.pem -text 署名付き証明書作成(CRT) /usr/local/ssl/misc/CA.sh -sign Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y CAの署名付きサイト証明書 newcert.pem 署名付き証明書確認 openssl x509 -in newcert.pem -text ssl.confの設定 apacheのhttpd.confに <IfModule mod_ssl.c> Include conf/ssl.conf </IfModule> があるのを確認。 作成した認証ファイルを適当なディレクトリにコピー mkdir /usr/local/apache2/conf/ssl cp /usr/local/ssl/misc/newreq.pem /usr/local/apache2/conf/ssl cp /usr/local/ssl/misc/newcert.pem /usr/local/apache2/conf/ssl cp /usr/local/ssl/misc/demoCA/cacert.pem /usr/local/apache/conf/ssl ssl.confを自分の環境に合わせって設定 vi /usr/local/apache2/conf/ssl.conf <VirtualHost 192.168.24.52:443> DocumentRoot "/usr/local/apache2/htdocs" ServerName solaris.testdomain.com ServerAdmin root@testdomain.com SSLCACertificateFile /usr/local/apache2/conf/ssl/cacert.pem SSLCertificateFile /usr/local/apache2/conf/ssl/newcert.pem SSLCertificateKeyFile /usr/local/apache2/conf/ss/newreq.pem /usr/local/apache2/bin/apachectl start こんな感じですが?? 間違っていたら、ご指摘ください。 よろしくお願いします。

noname#227025
noname#227025
回答No.2

# 引用が前後します。 > やはり、エラーになりました。 > penssl rsa -in newreq.pem -text > unable to load Private Key > 25185:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: ANY PRIVATE KEY こちらが本題だったのですね。# ちょっと勘違いしていました。 newreq.pem は証明書要求であって、秘密鍵ではありませんよ。 秘密鍵を表示したいなら、 openssl rsa -in newkey.pem -text とすべきなのでは? 以下、蛇足となりますが、 > 環境変数に/usr/local/ssl/binを通すように変更し、また、念の為に > CA.sh も書き換えて確認した所 > やはり、エラーになりました。 上記をしてから /usr/local/ssl/misc/demoCA/cacert.pem 作りましたか? CA.sh 内の以下の部分が実行されていないはずなので、cacert.pem ができていないはずです。 このままだと CA の証明書ができていないので、この CA で証明書要求に署名できませんよ。 92 $CA -out ${CATOP}/$CACERT $CADAYS -batch \ 93 -keyfile ${CATOP}/private/$CAKEY -selfsign \ 94 -infiles ${CATOP}/$CAREQ 手作業で cacert.pem を作るよりは、ディレクトリごと demoCA を削除して、CA.sh -newcert からやりなおすほうが簡単かもしれませんが。

noname#227025
noname#227025
回答No.1

CA.sh 内から OS 付属の /usr/sfw/bin/openssl コマンドが実行されてしまっているためではないでしょうか? 質問の内容から推測すると /usr/local/ssl 以下に OpenSSL をインストールされているようですが、which openssl の結果はどうなりますか? きちんと /usr/local/ssl/bin/opnessl が表示されますか? Solaris 10 では 6/06 から OpenSSL が付属しています。 http://www.sun.com/software/solaris/whats_new.jsp そして、OS 付属の openssl ca コマンドには -selfsign オプションがありません。(詳細は /usr/sfw/man 以下の ca(1) を参照) CA.sh の中身を確認すると分かると思いますが、CA.sh 内では openssl コマンドを呼び出しており、変数 OPENSSL を設定していないと、OS 付属とユーザがインストールした openssl コマンドのうちどちらの openssl コマンドが実行されるかは、環境変数 PATH に依存してしまいます。

hironona
質問者

補足

xinuさん、 環境変数に/usr/local/ssl/binを通すように変更し、また、念の為に CA.sh も書き換えて確認した所 やはり、エラーになりました。 penssl rsa -in newreq.pem -text unable to load Private Key 25185:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: ANY PRIVATE KEY

関連するQ&A

  • 秘密鍵の比較について

    下記2つの秘密鍵を比較しようとしています。   1.CSR作成時に同時に作成される秘密鍵   2.認証局より受領した証明書と1.の秘密鍵より作成した.p12ファイルから、下記のコマンドで抽出した秘密鍵      openssl pkcs12 -in input.pfx -nocerts -out output_key.pem(証明書名はサンプルです。) 同じ秘密鍵なはずなのに、catで開いた証明書の中身が合致しません。 なぜ合致しないかわかる方ご教示いただけないでしょうか。

  • OpenSSLのcsr生成について

    以下の環境で.scrを生成したいのですが、コマンドオプションが無効のようでうまくいきません。確かに該当するコマンドオプションは無いのですが、どのサイトを見てもcsr生成時にreqや?configが使われています。 また、これらのコマンドが使えなかった場合、どのようにオプションを指定してやればcsrが生成できますでしょうか?わかりにくい質問で恐縮ですが、ご存知の方がいらっしゃいましたらご教示のほどよろしくお願いいたします。 ■サーバー環境 OS:windows7(64bit) サーバ:httpd-2.2.16-win32-x86-openssl-0.9.8o.msi ■エラー内容 OpenSSL>req ?config ..\conf\openSSL.cnf -new -key server.key > server.csr unknown option ?config req [options] <infile >outfile whre options are オプション一覧省略... error in req

  • 既存のIISのSSL証明書からxmail用のserver.key,server.certの作り方

    こんにちは 現在Windows2003 Server上でIIS+xmail 1.26で運用しています。 このたびxmailでpops通信、smtps通信をするために設定をしているのですが 必要なserver.key,server.certを作る方法がうまく行かず悩んでいます。 IIS上のウェブサイトでSSL証明書を取得済みなのでそこから作れ出せないかな?といろいろググって試してみたのですが 以下の手順でうまくいきそうなのに xmail上は keyとcertが正しいペアではない旨のエラーになってしまいます。 どこの手順がおかしいのか? もしくは正しく設定できる別の方法があれば教えてください。 現在の手順 ・IISからpfxファイルをエキスポート(cert.pfx) ・OpenSSLで以下のコマンドを用いる openssl pkcs12 -in cert.pfx -out cert.txt ・cert.txtの中身をテキストの前半をコピペして server.key 後半をコピペしてserver.certを作成 ・OpenSSLで以下のコマンドを用いる openssl rsa -in server.key -out server.key ・上記をMAILROOTに設置 以上よろしくお願いします。

  • OpenSSLのインストールについて

    windows7 32bitでサーバを初めて組む超初心者です。 apacheは2.2.25でActive Perlは5.16.3.1です。 インストールするのは以下のファイルです。 Win32OpenSSL_Light-1_0_1 これをインストールしようとすると、途中で質問を聞かれます。 copy OpenSSL DLLs to The windows system directory The OpenSSL binaries(/bin)directory の二つのうち、一つを選択しなければ ならないようです。どちらを選択すれば良いのでしょうか? ちなみにapacheはC/apache Softewre Foundation/Apache2.2となっており、 PerlはC/Perlとなっております。

  • Apache起動時にエラー

    質問があります。 ApacheをSSLで起動し、IEからアクセスしようとしたら反応が遅く また、エラーログが大量に出ています。その後、表示ができませんと IEから出ています。 【ログ内容】 [notice] child pid XXXX exit signal Segmentation fault (11) また、Googleで調べたら、勘違いだったら申し訳ありません。 PHPからみで出るとかあったのですが、今回、とくにインストールしていません。知っている方が、いらっしゃったら教えてください。 環境としては、 OS Solaris10 Apache2.2.14とOpenSSL0.9.8lをソースでインストール 特に問題なくインストールできています。 切り分けで、OpenSSLをサンフリーからパッケージでインストールし Apacheをソースで再度、コンパイルしても現象は一緒でした。 OpenSSLの鍵・証明書の作成としては以下を実行 openssl genrsa -des3 -out server.key 1024 openssl rsa -in server.key -out server.key openssl req -new -key server.key -out server.csr -days 365  openssl x509 -in server.csr -out server.pem -req -signkey  server.key -days 365 httpd-ssl.confの設定 SSLCertificateFile /usr/local/apache2/conf/server.crt ↓ SSLCertificateFile /usr/local/apache2/conf/server.pem SSLCertificateKeyFile /usr/local/apache2/conf/server.key ↓(そのまま) SSLCertificateKeyFile /usr/local/apache2/conf/server.key http.confの設定 #Include conf/extra/httpd-ssl.conf ↓ Include conf/extra/httpd-ssl.conf 以上、よろしくお願いします。

  • OpenSSL ライセンス

    プログラミングとは少々異なる話題ですが、どのカテゴリで質問すればよいか分らなかったのでこちらのカテゴリに質問させて下さい。 個人で、OpenSSL と libssh2 の各ライブラリを用いたwindows用ソフトを作成しようと考えていますが、OpenSSL ライセンスについていまいちわからず悩んでおります。 [OpenSSL ライセンス] http://docs.hp.com/ja/T2351-90035/apas03.html http://publib.boulder.ibm.com/tividd/td/TWS/SC32-1277-01/ja_JA/HTML... にあるように、例えばいかなる形の再配布も "This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/)" と謝辞に含めろというようなことが書かれています。 一方で openssl に依存するライブラリの libssh2 は BSDライセンス。 これら2つをリンクしたバイナリを配布する際は、OpenSSLライセンスに従って 1.同梱するREADME.txt 等のファイルに"The product ..." を記述 2.http://docs.hp.com/ja/T2351-90035/apas03.html の内容を LICENSE.txt 等のファイルに記述 の2点を行えばよいという解釈でよろしいですか? また、もしソースコードも公開する場合は OpenSSL等 をリンクしていないわけですから、適当にBSD ライセンス等にしてしまってよいのでしょうか? そうするとバイナリ配布には謝辞を含め、ソースコードの配布には含めなくてよいということになりますか?

  • openssl_pkcs7_encryptについて

    もろもろ初心者です。 PHPを使ってセキュアなメールを送りたくて、openssl_pkcs7_encryptが使えるかなと思ってやってみたのですが、やり方がよく分かりません。 とりあえず、以下のように書いてみたら、失敗しました。 $key = file_get_contents("hoge.cer"); if(openssl_pkcs7_encrypt("hogehoge",realpath("enc.txt"),$key,array("To"=>"mailaddress","From"=>"HQ","Subject"=>"Eyes only"))){ echo"成功"; }else{ echo"失敗"; } hoge.cerは、Comodo FREE Personal Secure Email CertificateのやつをBase 64 encoded X.509でエクスポートしたものです。 mailaddressの部分は実際はComodoで登録したメールアドレスと記述していますが、教えてgooではメールアドレスを記述すると質問が中々反映されないので、便宜上mailaddressとしました。 何がダメか原因を教えてください!

    • ベストアンサー
    • PHP
  • OpenSSL関数エラーについて

    ■ OpenSSLのd2i_RSAPublicKey関数の戻り値がNULLの件 <環境> WindowsXP OpenSSLバージョン1.0.0a VC2005 <現象> OpenSSLのライブラリ関数 d2i_RSAPublicKey関数を使用して、RSA構造体に公開鍵要素を取得 したいのですが、NULLが返ってきてしまいます。(入力は、公開鍵) ERR_error_string(ERR_get_error(), NULL); 関数でエラーを確認したところ、 『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』 と表示されます。 以下に、手順を追って、実行したことを書きます。 何が悪いのか、ご指摘いただきたいです。 (PEM形式は使用しない前提です。) [鍵ペア生成(DER方式)] まず、DOS窓を立ち上げて、下記のようにDERフォーマットの RSA鍵ペアを作成しました。 openssl genrsa -out pri_test.der 2048 openssl rsa -in pri_test.pem -outform DER -out pri_test.der openssl rsa -inform DER -outform DER -in pri_test.der -pubout -out pub_test.der 秘密鍵:pri_test.der 公開鍵:pub_test.der [公開鍵の読み込み と d2i_RSAPublicKey関数のコール] 公開鍵:pub_test.der を、VCの入力ファイルに入力し、 d2i_RSAPublicKey関数をコールしました。 // file read /* 入力ファイルを開く */ FILE* file_p; RSA* rsa; unsigned char buff[1024]; unsigned char* pbuff; file_p = "pub_test.der", "rb"); if( NULL == pF_pubca ) { return -1; } // fileサイズを調べます(省略します) filesize = 0x126; // fileをバッファへ読み込みます memset( buff, 0, sizeof(buff) ); fread( buff, 1, filesize, file_p ); // buff には公開鍵pub_test.derの値 と サイズ分、 // 全て正常に格納されている事を確認済みです // ダブルポインタを作るために、ポインタバッファに渡します。 pBuff = pubca_buff; // d2i_RSAPublicKey関数をコールし、RSA構造体に公開鍵要素を取得します。 rsa = d2i_RSAPublicKey( NULL, &pBuff, filesize ); // ↑ここで、rsa構造体にはNULLが格納されています。 // エラーのログを出力します。 printf("%s\n", ERR_error_string(ERR_get_error(), NULL)); // ⇒ 『 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 』 // と表示されてしまいます。 <備考> 同様の方法で、入力を秘密鍵に設定し、d2i_RSAPrivateKey関数であれば、 正常にRSA構造体に各要素が格納されます。 何か、公開鍵をRSA構造体に格納するために、別の方法があるのでしょうか。

  • perlのメールフォームでS/MIME送信

    お世話になります。 perlをつかってメールフォームを作っています。 メールフォームから受け取った情報を(受け取るまでは暗号化してます。) S/MIMEで暗号化しメール送信したいと考えております。(linux sendmeil) 調べてみたところopensslを使いあらかじめ用意したテキストファイルを S/MIMEで送る事ができました。 ↓こんな感じです。--------------------------------------------------------------- $SMIME = 'openssl smime -sign -signer my-cesr.pem -inkey key.pem -in mail.txt -text | openssl smime -encrypt -from masa@****.co.jp -to yosi@****.co.jp -subject "signtest" -des3 my-cesr.pem | /usr/sbin/sendmail masa@****.co.jp'; open (MAIL, "| $SMIME"); close(MAIL); -------------------------------------------------------------------------------- ↑この方法ですとメールフォームから受け取った情報を一度ファイルに 保存(mail.txt)しなければならないので、実用的ではありません。 何とかファイルからではなく変数で送信したいのですがうまく行きません。 っというか方法がさっぱり分かりません。 どうぞ宜しくお願いします。m(__)m

    • ベストアンサー
    • Perl
  • apache OpenSSLの格納場所は?

    当方、windows7 32bitでwwwサーバを組んでいる超初心者です。 apacheは2.2.25、Active Perlは5.16.3.1で OpenSSLは1_0_1です。、 c/apache softoware Foundation c/perl c/openssl 以上の場所にインストールしています。 http://tako.jugem.cc/?eid=719 これの通りやって openssl versionとコマンド入力しても問題は発生しませんでした。 ここまでは順調でした。 しかし 私のダウンロードしたOpenSSLをインストールしても、 openssl.confがなかったので http://www.gadgety.net/shin/tips/win/apache2.html のソースをコピーペーストして、 openssl.confとしてc/apache softoware Foundation/apache2.2/conf/sslフォルダに 入れました。 openssl req -config openssl.cfg -new -out ./ssl.key/server.csrというコマンドを DOS窓に打ち込んでも指定されたパスが見つかりません。とメッセージが出ます。 私の頭で考えられるのはopenssl.confファイルの場所が違う、或いは拡張子の問題か? と考えていますが、お手上げ状態です。 なにか、これを見てお分かりになった方、教えてくださいませんか? 何が間違っているのでしょうか?