コマンドラインの証明書をインストールする方法


72

そのため、学校ではhttpsサイトにアクセスするために証明書をインストールする必要があります。firefoxでは、証明書をインポートできます。ただし、コマンドラインではできません。たとえば、実行するgit pushと次のようになります:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

証明書をインポートしてこれを削除するにはどうすればよいですか?インポートは私のために認証できなければなりません。また、.cerファイルであるため、に対する回答.crtは機能しません。また、すでに持っているように、gitをセットアップする手順は必要ありません。それが可能かどうか知りたいです。または、gitコマンドで認証を完全に無効にして、ここの答えが示すような証明書を無視させることはできますか?また、Webページをロードしたくないので、Firefoxでロードするように設定しました。git pushコマンドに次のような標準出力を提供したい:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

注:を見つけましたgit config --global http.sslverify false。しかし、git hackだけでなく、すべての答えを知りたい



@EricCarvalhoいいえ.crt。私が必要です.cer
ユニバーサル電気

gitコマンドに問題がありますか、何をしたいですか?私@ABとpingを与える
AB

@AB github証明書を使用するのではなく、学校が提供する証明書をgitが使用できるようにします。または、それが機能しない場合は、学校の証明書が私のために認証されることを許可してください
Universal Electricity

.crtと.cer拡張子は互換性があり、ファイル名の拡張子を変更するだけで、同じ形式であることに注意してください。
マイク

回答:


117

TL; DR

ブラウザだけでなくすべてが機能するためには、そのCA証明書をシステムの信頼できるCAリポジトリに追加する必要があります。

Ubuntuの場合:

  • / usr / local / share / ca-certificates /に移動します
  • 新しいフォルダ、つまり「sudo mkdir school」を作成します
  • .crtファイルを学校のフォルダーにコピーします
  • パーミッションがOKであることを確認してください(フォルダには755、ファイルには644)
  • 「sudo update-ca-certificates」を実行します

なぜ

何が起こっているのかを説明しましょう。他のポスターは、Github over HTTPSを使用するために証明書が必要ない理由を説明しています。

そこで起こっているのは、おそらくあなたの学校がすべてのSSL通信を傍受し、おそらくそれらを監視するためです。

それを行うために、彼らが行うことは本質的に「中間者」攻撃であり、そのため、ブラウザはgithubの証明書を検証できないと不平を言っています。学校のプロキシがgithubの証明書を取得し、代わりに独自の証明書を提供しています。

ブラウザが、GitHubの証明書に署名したCAに対して学校から提供された証明書を検証しようとすると、当然失敗します。

そのため、学校でSSL接続が機能するためには、その「MITM」攻撃を意識的に受け入れる必要があります。そして、学校のCA証明書を信頼できる証明書として追加することでそれを行います。

その学校のCAを信頼すると、偽のgithub証明書の検証が機能します。偽のgithub証明書は学校のCAによって検証されるためです。

学校の管理者はすべての暗号化された接続を傍受できるため、SSL接続はもはや安全ではないことに注意してください。


これは、必要のないdpkg-reconfigureがないMikeの答えと本質的に同じです。何が起こっているのかというと、gitや他のコマンドラインはSSL検証に関して100%標準ではないということです。学校が最初に実装した「SSLハック」を回避するには、「gitハック」と呼ばれるものを使用する必要があります。
電信

また、このコマンドを実行するにはルート権限が必要であるため、sudoコマンドを成功させる必要があります。そうしないと、システムの認証局を更新できません。
電信

2
回答を編集して、追加の事実を提供してください-コメントに残さないでください。
Guntbert

1
それがあるべきだと思う/usr/local/share/ca-certificates/。を参照してくださいman update-ca-certificates。ホワイトリストは存在し/usr/share/ca-certificates/ますが、/usr/local/share/ca-certificates/ディレクトリ内のすべてを暗黙的に信頼する方法について説明しています。
イアンヒクソン

3
Ubuntu 16.04でCAを追加した後、CA をピックアップ/usr/local/share/ca-certificatesするsudo dpkg-reconfigure ca-certificatesために使用する必要がありました。
マットL.

41

ca-certificatesパッケージには、その内の命令を持っていますREADME.Debian

暗黙的に信頼されるようにローカル認証局をインストールする場合は、証明書ファイルを末尾が.crtintoである単一ファイルとして/usr/local/share/ca-certificates/再実行してください update-ca-certificates

ここで、他の回答とは異なるディレクトリに言及していることに注意してください。

/usr/local/share/ca-certificates/

にコピーした後/usr/local/share/ca-certificates/、証明書の権限を更新してsudo update-ca-certificates、Telegraphersの回答に記載されているとおりに実行できます。出力に証明書が追加されたことがわかります。


4
これはUbuntu 16.04でも同様に機能しました。受け入れられた答えの道は私にとってうまくいきませんでした。
プラスゴス

これは受け入れられた答えである必要があり、これはubuntuサーバー16.04 LTSの実用的なソリューションです。
ラシタベナラガマ17年

15

拡張子.crt、.pem、および.cerは互換性があり、ファイル名の拡張子を変更するだけで、同じ形式になります。これを試して:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem

これは事実ですが、助けにはなりませんでした。しかし、将来的には人々を助けるかもしれません
ユニバーサル電気

私はもう1行追加しました。gitが証明書を信頼するようにしてください。代わりに.crtの4つのステップのうちの2つで.pemに。@ユニコーンは非常においしいです
マイク

3
.CERファイルがバイナリ(DER形式)の場合、拡張子を変更することはできません。openssl(1)証明書をPEM形式に変換するために使用します。実行:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Archユーザー

1
:@Archuserはたぶん、右のコマンドはこれですopenssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

以前の回答の次の編集を使用します。

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

ワンライナーになるように変更できます。

多くの場合、両方のsite.example.comexample.com同じホスト名です。


3

すべてのソリューションを読んで、このように解決しました。

sudo openssl x509 -inform DER -in certificate.cer -out certificate.crt

sudo mv certificate.crt /usr/share/ca-certificate/

cd /usr/share/ca-certificate

sudo chmod 644 certificate.crt

sudo dpkg-reconfigure ca-certificates

sudo update-ca-certificates

1

firefoxとgoogle chromeに証明書をインストールしても同様の問題がありましたが、ターミナルsudo apt-get updateでの更新が機能せず、403 Forbidden IPエラーが発生しました。私もsample.cerファイルを持っていました。したがって、基本的には最初に.crtに変換する必要があります。

sudo openssl x509 -inform DER -in sample.cer -out sample.crt

それでもsudo dpkg-reconfigure ca-certificates、必要な証明書が見つかりませんでした。私の問題は、間違った場所で証明書をコピーしていたことです。

その代わりに、それをコピーするので$/usr/share/ca-certificates 、私はでそれをコピーして$/usr/local/share/ca-certificates 、適切な場所に置くことでしかし、私の問題を解決しました。ただし、パッケージを更新したり、新しいパッケージをインストールしたりすることはできません。

クイックフィックス(私にとって):

httpの代わりにftpを使用

sudo sed -i s/http/ftp/ /etc/apt/sources.list && apt-get update

上記のコマンドが機能しました。変更を行う前に、sources.listファイルのコピーを作成してください。

何か明確でないか適切でない場合は、私を修正してください。


0

を使用してWebサイトにアクセスするにhttpsは、CLIまたはGUIブラウザーを使用しているかどうかにかかわらず、shool証明書は必要ありません。

githttp(s)経由で使用するには、GitHubのプロファイル設定で公開キーを登録する必要があります

詳細はこちらここで GitHubプロファイルを変更します。


これを試して:

sudo apt-get install w3m
w3m https://github.com/

…追加の証明書なしで機能します。

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