私は私のドメインにSSLを今日設定していて、別の問題に直面しました-誰かがいくつかの光を当てることができることを望んでいました。
次のエラーメッセージが引き続き表示されます。
[エラー] Init:ファイル/etc/Apache2/domain.com.ssl/domain.com.crt/domain.com.crt [error]からサーバー証明書を読み取れませんSSLライブラリエラー:218529960エラー:0D0680A8:asn1エンコードルーチン:ASN1_CHECK_TLEN:wrong tag [error] SSLライブラリエラー:218595386エラー:0D07803A:asn1エンコードルーチン:ASN1_ITEM_EX_D2I:nested asn1エラー
Apache 2.2.16とUbuntu 10.10を実行しています。私の.crtファイルには、開始タグと終了タグがあり、受け取った確認メールから正確にコピーされました。非常にイライラします!
乾杯!
編集>> .crtを確認しようとすると、動作しないようです。
>> openssl x509 -noout -text -in domain.com.crt 証明書をロードできません 16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib .c:650:予期:信頼できる証明書
また>>
>> openssl x509 -text -inform PEM -in domain.com.crt unable to load certificate 21321:error:0906D06C:PEM routines:PEM_read_bio:no start line: pem_lib.c:650:予期:信頼できる証明書
>> openssl x509 -text -inform DER -in domain.com.crt unable to load certificate 21325:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag: tasn_dec.c:1316: 21325:error:0D07803A:asn1エンコードルーチン:ASN1_ITEM_EX_D2I:nested asn1エラー:tasn_dec.c:380:Type = X509
編集>>(ちなみに助けてくれて乾杯)
>> grep '^ -----' domain.com.crt ----- BEGIN CERTIFICATE ----- ----- END CERTIFICATE -----
証明書を提供する会社にメールを送信しただけで、彼らは応答しました>
お客様から提供されたCSRファイルを確認しましたが、これが正しく生成されたことを確認できました。現在発生しているエラーは、CSRのインストールに誤ったコマンドラインを使用しているために発生します。このdomain.com.crtは、コマンドラインからドメインの名前に合わせて変更する必要があります。
行が^ 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内で削除することもできます。
編集:この回答が2019年には適用されなくなると指摘した@ dave_thompson_085に感謝します。つまり、Apache/OpenSSLは^ Mで終了する行を許容するため、問題を引き起こしません。とはいえ、コメントに表示されるいくつかの異なる例である他のフォーマットエラーは、依然として問題を引き起こす可能性があります。証明書がシステム間で移動されている場合は、これらを注意深く確認してください。
証明書署名要求(CSR)を読み込もうとしたときに、同様のエラーでこのページにアクセスする人(OPが証明書を読み込んでいることに注意):正しいOpenSSLコマンドを使用してください。 x509
は証明書用、req
はCSR用です。
openssl req -in server.csr -text -noout
対
openssl x509 -in server.crt -text -noout
ちょうどこれについてぐるぐる回っていました、そしてそれは私が間違った方法で証明書を持っていることがわかりました-例えば.
SSLCertificateFile /etc/Apache2/ssl/server.key
SSLCertificateKeyFile /etc/Apache2/ssl/server.crt
の代わりに:
SSLCertificateFile /etc/Apache2/ssl/server.crt
SSLCertificateKeyFile /etc/Apache2/ssl/server.key
このエラーが発生しているかどうかを確認するための何か。
>> 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
私の場合、証明書の「-」文字が異なることがわかりました。証明書をサーバーに配置した管理者からのコピー/貼り付けの問題であり、テキストエディターが特別なUnicode文字に置き換えられているはずです。
これは診断に何時間もかかり、結局私はそれを推測し、証明書をviで編集して既存の「-」文字を削除し、再入力しました。
これが誰かを助けることを願っています。
私の場合、最初に.crtファイルを作成した人が実際に。PEM形式のファイルを作成したため、OPのエラーが発生しました。 .crtという名前を付けました。
次の役立つガイドを実行してこれを発見しました: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates -and-how-to-convert-them
.crtの名前を.pemに変更するだけで済みました。ガイドは、OPの質問からのエラーは入力ファイルがすでにPEM形式であることを意味しているため、DER形式から.pemに変換しようとすることはできず、実際には不要であることを示しています。
証明書ファイル内のファイルの末尾または先頭にスペースがないことを確認してください。テキスト全体を選択し、テキストのみのエディターで空白を探すことにより、証明書ファイル内にスペースや空白がないことを確認してください。
また、構成されたすべてのファイルが存在し、正しいかどうかも確認してください。
例:他の投稿で、.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
上記のすべてのファイルが実際に存在し、有効であることを再度確認してください。
他の誰かがこの問題に遭遇し、Apacheエラーログに次のようなメッセージが表示された場合:
初期化:ファイル/etc/Apache2/domain.com.ssl/domain.com.crt/domain.com.crtからサーバー証明書を読み取れません
Apache設定の宣言でキーと証明書ファイルを入れ替えていないことを確認してください。キーを証明書ファイルに、証明書をキーファイルにポイントしました。この投稿は私が問題を理解するのに役立ちましたが、私はそれを別の潜在的な問題/解決策として指摘したいと思いました。
私の問題(Apache 2.4で新しいサーバーをインストールするときに同じエラーが発生する)は、Apache(2.4)がバイナリ.crtファイルを読み取れないことでした。個人用証明書ストア(mmc付き)にインポートし、base-64エンコードX.509(.cer)としてエクスポートしました。エクスポートされたファイルの名前を同じ名前(.crt)に変更し(私のhttpd-ssl.confで使用)、再び機能しました!同じ証明書が私の古いサーバーで機能しました。Apache2.4の方が2.2よりも厳しいですか?幸運を。
最近、WindowsでLets Encrypt(letsencrypt)を使用してこの問題が発生しました。証明書はUTF-16LEとしてエンコードされて戻ってきました。 (dos2unixを使用して)UTF-8に変換すると、問題が解決しました。
。keyと.crtを切り替えたファイル名のため、同じエラーが発生しました
Apache構成で顧客提供のp7bタイプIIS証明書を誤って使用したときにも同様の問題がありました。証明書をx509形式に変換するとエラーが修正されました。どちらのタイプも表面上は同じに見えますが、明らかに内部が異なります。
私の場合は空の行だけでした。 nanoでntepadまたはnotepad ++からcrtファイルを貼り付けると、常に次のような結果が得られます。
sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg
空のスペースを削除してすべてを一行に置くと、問題が解決されますEg:
sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
私の場合、それはBOMがファイルに存在することに関係しています。次のようにそれを取り除くことができます:
tail -c +4 ssl.crt > ssl2.crt
常に3バイトかかるかどうかわからないため、より良い方法は次のとおりです。
vi -c 'se nobomb' -c wq ssl.crt
電子メールに貼り付けられたIISスタイルの.p7bファイルのコンテンツが送信されたため、この問題が発生しました。 .pemと同様に、「----- BEGIN CERTIFICATE -----」タグと「----- END CERTIFICATE -----」タグがあり、コンテンツは同様に見えるbase64エンコーディングを使用します。私はそれを次のように* .pemファイルに変換しました:
openssl pkcs7 -print_certs -in cert.p7b -out cert.cer
その後、Apache 2.2は満足しました。