SSLエラー-ファイルからサーバー証明書を読み取れません


37

今日、私のドメイン用にSSLを設定していますが、別の問題が発生しました。誰かが光を当てることができることを望んでいました。

次のエラーメッセージが引き続き表示されます。

[エラー]初期化:ファイル/etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crtからサーバー証明書を読み取れません
[エラー] SSLライブラリエラー:218529960エラー:0D0680A8:asn1エンコードルーチン:ASN1_CHECK_TLEN:wrongタグ
[エラー] SSLライブラリエラー:218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

Apache 2.2.16とUbuntu 10.10を実行しています。.crtファイルには開始タグと終了タグがあり、受け取った確認メールから正確にコピーされているため、非常にイライラします。

乾杯!

編集>> .crtを検証しようとすると動作しないようです:

>> openssl x509 -noout -text -in domain.com.crt 
証明書を読み込めません
16851:エラー:0906D06C:PEMルーチン:PEM_read_bio:no start line:pem_lib.c:650:Expecting:TRUSTED CERTIFICATE

また>>

>> openssl x509 -text -inform PEM -in domain.com.crt
証明書を読み込めません
21321:エラー:0906D06C:PEMルーチン:PEM_read_bio:no start line:pem_lib.c:650:Expecting:TRUSTED CERTIFICATE
>> openssl x509 -text -inform DER -in domain.com.crt
証明書を読み込めません
21325:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
21325:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type = X509

編集>>(ちなみにヘルプを応援)

>> grep '^ -----' domain.com.crt
-----証明書の開始-----
-----証明書の終了-----

証明書を提供する会社にメールを送っただけで、彼らは答えた>

提供されたCSRファイルを確認しました。これが正しく生成されたことを確認できます。現在発生しているエラーは、CSRのインストールに間違ったコマンドラインを使用しているために発生します。ドメインの対応する名前を使用して、コマンドラインからこのdomain.com.crtを変更する必要があります。

  • 現在、CRTはmysite.com.crtに設定されています-例としてdomain.com.crtを使用しました

の出力を教えてくださいgrep '^-----' domain.com.crt
量子

Williamsowen、証明書の要点は、Webサーバーに接続するすべての人に見せることです。それは私的なものではありません。この場合、ここに証明書全体を添付または投稿して、推測せずに直接確認できるようにしますか?
MadHatterは

お待ちください、あなたは私の答えを受け入れたところです。それは、問題を引き起こしているのはターミナルのWindowsラインフィードだったということですか?
MadHatterは

MadHatter-おaび申し上げます!これは初めてですが、機能するようになりました。受け取ったメールの書式設定はオフになっていて、皆さんに感謝できませんでした!
ウィリアム

回答:


49

行が^ Mで終了する可能性はありますか?これは、WindowsシステムからUNIXシステムにファイルを移動する場合の潜在的な問題です。チェックする簡単な方法の1つはvi、「show me the binary」モードで使用することvi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crtです。

このように各行がcontrol-Mで終わる場合

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

Windowsの行終端形式のファイルがありますが、Apacheはそれらを好みません。

オプションには、ファイルを再度移動すること、より注意を払うことが含まれます。または、dos2unixコマンドを使用してそれらを取り除きます。注意すれば、vi内で削除することもできます。


編集:@ dave_thompson_085に感謝します。彼は、この回答が2019年に適用されなくなったことを指摘しています。つまり、Apache / OpenSSLは^ Mで終了する行に対応しているため、問題は発生しません。そうは言っても、コメントにいくつかの異なる例が表示される他のフォーマットエラーは、依然として問題を引き起こす可能性があります。証明書がシステム間で移動されている場合は、これらを注意深く確認してください。


私にとっては、コピー&ペーストのエラーで、ヘッダーの最初の数文字を省略していました-----BE...インスピレーションを二重チェックしてくれてありがとう!
cfi

おかげで、これは私の問題でした!Windowsのnotepad ++では、EDIT-EOL変換ダイアログを使用して、正しいLF形式の設定を変更できます。また、View-Show Symbolメニューを使用して、実際にウィンドウCR LFの行末を確認できます。
ビョルン

1
私の証明書は単に空のファイルになってしまいました。私が推測する世代で何かが壊れた。この答えは、私がそれを開いてそれを見るのを促しました。
フリッカーフライ14

Windowsユーザーへの注意:Windowsを使用している場合でも、おそらく行形式をUNIXに変換する必要があります。DOS2UNIXはWindowsコマンドではなく、Linuxコマンドです。良いニュースは、Git for Windowsが提供しています。CigWinもおそらくそうしますが、それについてはわかりません。
イグナシオセグラ

Windowsユーザーへの注意:Cygwinのcpを使用してネットワーク共有から制限付きアクセス許可ファイルをコピーすると、Windowsエクスプローラーの[プロパティ] / [セキュリティ]タブの権限のリストが台無しになります。たとえば、「NUL SID」、無効になっているEveryone、およびドメインユーザーエントリを見ました。
うなぎghEEz

19

証明書署名要求(CSR)を読み取ろうとするときに同様のエラーでこのページに到着した場合(OPは証明書を読み取っています):正しいOpenSSLコマンドを使用してください。x509証明書用でreqあり、CSR用です。

openssl req -in server.csr -text -noout

openssl x509 -in server.crt -text -noout

17

ちょうどこれをぐるぐる回っただけで、間違った方法で証明書を持っていることが判明しました-例えば

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

の代わりに:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

このエラーが発生しているかどうかを確認するための何か。


11
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

証明書の形式に問題があると思われます。

次の2つのコマンドの両方を実行し、出力を提供します。

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 

この答えをありがとう。「.cer」として提供されたSAがすでに「.pem」シークレットで
-javafueled

10

私の場合、証明書に異なる「-」文字が含まれていることがわかりました。証明書をサーバーに配置した管理者からのコピー/貼り付けの問題であり、テキストエディターが-途中で特別なUnicode文字に置き換えられている必要があります。

これは診断に何時間もかかり、最終的に私はそれを推測し、viで証明書を編集し、既存の「-」文字を削除して、それらを再入力しました。

これが誰かを助けることを願っています。


8

私の場合、最初に.crtファイルを作成した人が実際に.PEM形式のファイルを作成し、.crtという名前を付けたため、OPのエラーが発生しました。

次の役立つガイドを実行して、これを発見しました:https : //support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how -変換する

.crtの名前を.pemに変更するだけで完了です。ガイドは、OPの質問からのエラーは、入力ファイルがすでにPEM形式になっていることを意味するため、DER形式から.pemに変換することはできないため、実際には不要であることを示しています。


4

証明書ファイル内にファイルの末尾または先頭にスペースがないことを確認してください。テキスト全体を選択し、テキストのみのエディターで空白スペースを探すことにより、証明書ファイルにスペースや空白がないことを慎重に確認してください。

また、設定されたすべてのファイルが実際に存在し、正しいかどうかも確認してください。

例:他の投稿では、.keyファイルの名前はmy domain.com.crtであると言いますが、vhost構成ではdomain.com.crtがあります

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

上記のすべてのファイルが実際に存在し、有効であることを再度確認してください。


1
また、ダッシュがダッシュであることも確認してください。変更したいMicrosoftianテキストエディタ--。トラブルシューティングするのはそれほど面白くありませんでした。
シェーンマッデン

はい、Ubuntuを使用しているので、ターミナルを開いてnanoなどを使用するだけです。この方法で確実になります。
ジョージタシオウリス

こんにちは、フィードバックに感謝します-私はすべてをチェックしました、そしてすべては良いです。crtファイルを検証しようとしましたが、次の結果が得られましたsudo openssl x509 -noout -text -in domain.com.crt unable to load certificate 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE
。– williamsowen

1
domain.com.crtファイルの最初の行はで始まり-----BEGIN CERTIFICATE-----、最後の行はで終わり-----END CERTIFICATE-----ますか?
ジョージタシオウリス

1

他の誰かがこの問題にぶつかり、Apacheエラーログに次のようなメッセージが記録された場合:

初期化:ファイル/etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crtからサーバー証明書を読み取れません

apache configの宣言でキーと証明書ファイルを交換していないことを確認してください。キーを証明書ファイルにポイントし、証明書をキーファイルにポイントしました。この投稿は問題を理解するのに役立ちましたが、別の潜在的な問題/解決策として指摘したかったのです。


0

私の問題(Apache 2.4で新しいサーバーをインストールするときに同じエラーが発生する)は、Apache(2.4)がバイナリ.crtファイルを読み取れなかったことです。個人証明書ストア(mmcを使用)にインポートし、base-64でエンコードされたX.509(.cer)としてエクスポートしました。エクスポートされたファイルの名前を同じ名前(.crt)(私のhttpd-ssl.confで使用)に変更すると、再び機能しました!私の古いサーバーでも同じ証明書が機能しましたが、Apache 2.4は2.2よりも厳しいでしょうか?がんばろう。


0

私の場合、ファイルに存在するBOMに関係しています。次のようにストリップすることができます:

tail -c +4 ssl.crt > ssl2.crt

常に3バイトかかるかどうかわからないため、より良い方法は次のとおりです。

vi -c 'se nobomb' -c wq ssl.crt

0

.keyを.crtファイル名に切り替えたため、同じエラーが発生しました


0

お客様がapache configでお客様が用意したp7bタイプIIS証明書を誤って使用した場合、同様の問題が発生しました。証明書をx509形式に変換すると、エラーが修正されました。どちらのタイプも表面では同じように見えますが、内側では明らかに異なっています。


0

IISスタイルの.p7bファイルの内容が電子メールに貼り付けられて送信されたため、この問題が発生しました。.pemと同様に、「----- BEGIN CERTIFICATE -----」および「----- END CERTIFICATE -----」タグがあり、コンテンツは同様の外観のbase64エンコードを使用します。次のように* .pemファイルに変換しました。

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

その後、Apache 2.2は満足しました。


0

最近、WindowsでLets Encrypt(letsencrypt)を使用してこの問題が発生しました。証明書はUTF-16LEとしてエンコードされて戻ってきました。(dos2unixを使用して)UTF-8に変換することで問題が解決しました。


0

私の場合、空の行だけでした。nanoでntepadまたはnotepad ++からcrtファイルを貼り付けると、常に次のようになりました

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

空のスペースを削除してすべてを一列に並べることで問題が解決しました。例:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.