こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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で、調べているんですが、よくわかりません。
ご存知の方がいたら、教えてください。
よろしくお願いします。

投稿日時 - 2009-11-23 21:19:21

QNo.5470723

すぐに回答ほしいです

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

> 少し混乱してきまして、確認させてください。
> 私は、以下の方法で、認証ファイル作成しています。

確認させてもらいたいのですが、質問当初の問題「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 については何も処理していませんが...

落ち着いてよく考えてみましょう。

投稿日時 - 2009-11-25 10:36:51

お礼

xinuさん、

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

投稿日時 - 2009-11-25 22:55:58

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(6)

No.5 に typo があったので訂正します。

(誤)
> 以上のことを踏まえると、以下の CRL に対する処理は明らかに不要ですよね。

(正)
以上のことを踏まえると、以下の CSR に対する処理は明らかに不要ですよね。

投稿日時 - 2009-11-25 10:50:42

ANo.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

余談ですが、もしどこかを参照されているのであればそこのリンクも
張ってあった方が回答しやすいです。

投稿日時 - 2009-11-24 11:05:35

# 何度もすみません。

> このままだと CA の証明書ができていないので、この CA で証明書要求に署名できませんよ。

No.2 で上記のように書きましたが、訂正します。

このままだと CA の証明書ができていないので、証明書の verify ができない。(CA.sh -verify)

でした。

投稿日時 - 2009-11-24 00:56:08

補足

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

こんな感じですが??
間違っていたら、ご指摘ください。
よろしくお願いします。

投稿日時 - 2009-11-24 23:47:37

# 引用が前後します。

> やはり、エラーになりました。
> 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 からやりなおすほうが簡単かもしれませんが。

投稿日時 - 2009-11-24 00:39:19

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 に依存してしまいます。

投稿日時 - 2009-11-23 23:14:42

補足

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

投稿日時 - 2009-11-23 23:41:14

あなたにオススメの質問