curlの修正方法:(60)SSL証明書:sudoを使用すると無効な証明書チェーン


12

したがって、Mavericksのアップグレードカールには、証明書に関する問題が多くあります。

自己署名証明書を使用してWebサーバーからファイルをカールしようとすると、「SSL証明書:無効な証明書チェーン」というエラーが発生しました。

これは、私のシステムのキーチェーンに証明書を追加し、いつも、私が見つけた情報SSLを許可するように設定することで修正されましたここここを

これは問題なく機能し、ファイルを丸めると正しくダウンロードされます。

ただし、以前にsudoでcurlを実行した場合(たとえば、sudoで実行する必要があり、その中でcurlを実行するスクリプトがある場合)、同じエラーメッセージに戻ります。

ルートがシステムのキーチェーンから読み取らないのではないでしょうか?

誰かがこれを修正する方法を知っていますか?

回答:


17

CA証明書をファイルシステム(PEM形式)に保存する場合、curlにそれらを使用するように指示できます。

sudo curl --cacert /path/to/cacert.pem ...

証明書の検証をオフにすることもできます

sudo curl --insecure ...

編集:フィードバックに関して更新

これを永続的に設定する場合は、.curlrcファイルを作成してホームディレクトリに配置する必要があります。sudoコマンドでは、このファイルが必要になる場合があります。/var/rootこのファイルでは、コマンドラインと同じオプションを使用しますが、ダッシュは使用しません。1行に1つのオプション:

cacert=/path/to/my/certs.pem

回答ありがとうございます。sudoで実行されているスクリプトはサードパーティのものであるため、curlコマンド自体を実際に変更することはできません。安全でないことは実際には選択肢ではありません。これはグローバルに実行できますか?
Jacob Tomlinson

.curlrcファイルを作成してホームフォルダーに保存できますが、sudoを使用する場合は/var/root/.curlrcである必要があります。ファイルには、ダッシュなしのオプションが1行に1つずつ含まれている必要があります。つまり、「cacert = / path / to / my / certs.pem」
Dan

1
の代わりにroot-available を設定するための+1 。これはまさにそのとおりです。ネットワークの位置にいる攻撃者がそうすることは、MITMにとって簡単であり、コードを挿入することになります。.curlrc--insecure
zigg

このおかげで、私が探しているように聞こえます。明日試してみて、うまくいけば賞金を授与します。
Jacob Tomlinson

6

ルートは現在のユーザー信頼設定から読み取りませんが、管理者信頼設定とルートユーザー固有の信頼設定の両方があります。(これらもシステムの信頼設定とは異なります。)また、証明書の信頼設定は、証明書をキーチェーンに追加することとは多少異なります。完全に追加しなくても、証明書を信頼できるものとしてマークできます。(ここでの正確な状況は私には明らかではなく、私が見たドキュメントはあいまいです。)

現在のユーザーに対して証明書を信頼できるものとしてマークできます

$ security add-trusted-cert /path/to/cert.pem

しかし、それはrootには役立ちません。ご想像sudoのとおり、解決策は上記のいずれかであり、ルートユーザーに対して具体的に信頼できるものとしてマークされます。

$ sudo security add-trusted-cert /path/to/cert.pem

または、-dフラグを使用して管理者の信頼設定に追加します。

$ security add-trusted-cert -d /path/to/cert.pem

(OS Xはパスワードダイアログをポップアップしてこれを確認します。)

後者の2つのどちらでも十分ですsudo curl

リファレンス:https : //developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


質問で述べたように、システムキーチェーンとログインキーチェーンにすでに追加しています。
Jacob Tomlinson

私が提案したことを実際に試しましたか?私はあなたが説明した状況でそれをテストし、それはうまくいきました。詳細ははっきりしていません-ドキュメントはあいまいです-証明書の信頼設定は、キーチェーンに証明書を追加することと同義ではなく、管理者証明書の信頼設定は、システムとユーザー設定/キーチェーン。(ミックスにはrootユーザー固有のユーザー設定のセットもあるようです。)この点を明確にするために、回答を編集しました。このソリューションを試してください。
Wes Campaigne

はい、私はあなたが最初に投稿したときにこの解決策を試しました。証明書はシステムキーチェーンにあり、信頼できるものとして設定されています。まだ運がない。
Jacob Tomlinson 2014年

5

これは本当に出力のヒントにあります:

echo insecure >> ~/.curlrc

上記のソリューションを使用する利点は、すべてのcurlコマンドで機能することですが、安全でない信頼できないホストに接続することでMITM攻撃を引き起こす可能性があるため、お勧めできません。


2

MacPortsを使用している場合(そして、あなたが言及したサードパーティのスクリプトがそれを削除し$PATHたり呼び出したりしない/usr/bin/curl場合)、certsynccurlポートをこの順序でインストールできます。

certsyncMacPorts curlが自動的に証明書を取得するように、システムキーチェーンをエクスポートして$prefix/etc/openssl/cert.pemシンボリックリンクをインストールするツールと対応するlaunchd plistです$prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemcertsyncシステムのキーチェーンを変更すると、生成されたファイルも自動的に更新されます。


おかげで、できればMacPortsの使用を避けたいと思います。
Jacob Tomlinson


-1

sudo curl(OSX Sierraで)動作させるには、証明書をにインポートしSystem.keychainてそこで信頼する必要がありました。これは、キーチェーンアプリで手動で、または次のコマンドを使用して実行できます。

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

-dシステムキーチェーンへのパスを指定して手動で設定し、-kまだインポートされていない場合に証明書が実際にインポートされるようにすることが重要でした。

コマンドはなしsudoでも機能しますが、UIダイアログを介してパスワードを要求するため、スクリプトのハードルになる可能性があります。


エラーが表示されるSecCertificateCreateFromData: Unknown format in import.
rraallvv

誰が反対票を投じたとしても、「OSX Sierraで」と明確に書いており、これは私たちにとって有効なソリューションでした。それよりも新しいOSXバージョンで機能しない場合は、OSXサポートまたはツールが変更された可能性があります。または、前のコメンターのような問題で、入力ファイルがサポートされている形式ではありません(質問ではそれが指定されていません)。
Alexander Klimetschek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.