Cách cài đặt chứng chỉ cho dòng lệnh


72

Vì vậy, ở trường, chúng ta cần cài đặt chứng chỉ để truy cập các trang https. Trong firefox, tôi có thể nhập chứng chỉ. Tuy nhiên, tôi không thể làm như vậy với dòng lệnh. Ví dụ: chạy git pushtôi nhận được:

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

Làm cách nào để nhập chứng chỉ để xóa cái này? Việc nhập phải có thể xác thực cho tôi. Ngoài ra, nó là một .certập tin, vì vậy câu trả lời cho .crtsẽ không hoạt động. Ngoài ra, tôi không muốn các bước về cách thiết lập git, như tôi đã có. Tôi muốn biết nếu có thể làm điều đó. Hoặc tôi có thể vô hiệu hóa xác thực bằng gitlệnh hoàn toàn và làm cho nó bỏ qua các chứng chỉ như câu trả lời ở đây nói gì không? Ngoài ra, tôi không muốn trang web tải, tôi đã đặt firefox để làm điều đó. Tôi muốn git pushlệnh đưa ra đầu ra tiêu chuẩn như:

[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

Lưu ý: Tôi đã tìm ra nó git config --global http.sslverify false. Nhưng tôi muốn thấy một câu trả lời cho tất cả mọi thứ, không chỉ là một bản hack



@EricCarvalho không, đó là cho .crt. Tôi cần.cer
Điện toàn cầu

Bạn có vấn đề với lệnh git của bạn hoặc những gì bạn muốn làm? Hãy cho tôi một ping với @AB
AB

@AB Tôi muốn cho phép git sử dụng chứng chỉ mà trường cấp cho chúng tôi, thay vì cố gắng sử dụng chứng chỉ github. Hoặc nếu điều đó không hiệu quả thì hãy cho phép chứng nhận của trường xác thực với tôi
Universal Electrical

Lưu ý rằng phần mở rộng .crt và .cer có thể hoán đổi cho nhau, chỉ cần thay đổi phần mở rộng tên tệp, chúng có cùng dạng.
Mike

Câu trả lời:


117

TL; DR

Để mọi thứ hoạt động và không chỉ trình duyệt của bạn, bạn cần thêm chứng chỉ CA đó vào kho lưu trữ CA đáng tin cậy của hệ thống.

Trong Ubuntu:

  • Chuyển đến / usr / local / share / ca-chứng chỉ /
  • Tạo một thư mục mới, tức là "sudo mkdir school"
  • Sao chép tệp .crt vào thư mục trường
  • Đảm bảo các quyền là OK (755 cho thư mục, 644 cho tệp)
  • Chạy "sudo update-ca-cert"

Tại sao

Hãy để tôi giải thích những gì đang diễn ra, vì vậy những người đăng khác thấy tại sao họ không cần bất kỳ chứng chỉ nào để sử dụng Github qua HTTPS.

Điều đang xảy ra ở đó là trường học của bạn đang chặn tất cả các thông tin liên lạc SSL, có lẽ là để giám sát chúng.

Để làm điều đó, những gì họ làm thực chất là một cuộc tấn công "người ở giữa" và vì thế, trình duyệt của bạn phàn nàn rằng anh ta không thể xác minh chứng chỉ của github. Proxy trường của bạn đang lấy chứng chỉ của github và thay vào đó cung cấp chứng chỉ của chính nó.

Khi trình duyệt của bạn cố gắng xác minh chứng chỉ được cung cấp của trường chống lại CA đã ký chứng nhận của github, nó hoàn toàn thất bại.

Vì vậy, để kết nối SSL hoạt động trong trường, bạn cần có ý thức chấp nhận cuộc tấn công "MITM" đó. Và bạn làm điều đó bằng cách thêm chứng chỉ CA của trường làm chứng chỉ đáng tin cậy.

Khi bạn tin tưởng CA trường đó, việc xác minh chứng chỉ github giả của bạn sẽ hoạt động, vì chứng chỉ github giả sẽ được CA trường xác minh.

Xin lưu ý rằng kết nối SSL không còn an toàn nữa vì quản trị viên trường học của bạn sẽ có thể chặn tất cả các kết nối được mã hóa của bạn.


Đây thực chất là câu trả lời giống như của Mike mà không cần cấu hình lại dpkg mà không cần thiết. Điều có thể xảy ra là git hoặc một dòng lệnh khác không phải là tiêu chuẩn 100% liên quan đến xác minh SSL của họ. Sử dụng cái mà bạn gọi là "git hack" có thể cần thiết để khắc phục "hack SSL" mà trường bạn đã triển khai trước tiên.
điện báo

Ngoài ra, hãy lưu ý rằng bạn cần quyền root để chạy các lệnh này, vì vậy lệnh sudo cần phải thành công hoặc bạn sẽ không thể cập nhật Cơ quan cấp chứng chỉ của hệ thống.
Điện báo viên

2
Vui lòng chỉnh sửa câu trả lời của bạn để cung cấp các sự kiện bổ sung - đừng để lại bình luận.
guntbert

1
Tôi tin rằng nên được /usr/local/share/ca-certificates/. Xem man update-ca-certificates, trong đó nói về việc có một danh sách trắng cho /usr/share/ca-certificates/nhưng về cách nó hoàn toàn tin tưởng mọi thứ trong /usr/local/share/ca-certificates/thư mục.
Ian Hickson

3
trên Ubuntu 16.04 sau khi thêm CA vào /usr/local/share/ca-certificatestôi phải sử dụng sudo dpkg-reconfigure ca-certificatesnó để lấy CA.
Matt L.

41

Các ca-certificatesgói có các hướng dẫn trong của nó README.Debian:

Nếu bạn muốn cài đặt cơ quan chức năng chứng nhận địa phương để được tin cậy ngầm, xin vui lòng đặt các tập tin giấy chứng nhận một tác phẩm kết thúc với .crtthành /usr/local/share/ca-certificates/và tái chạy update-ca-certificates.

Lưu ý rằng nó đề cập đến một thư mục khác với các câu trả lời khác ở đây:

/usr/local/share/ca-certificates/

Sau khi sao chép vào, /usr/local/share/ca-certificates/bạn có thể cập nhật các quyền của chứng chỉ và chạy sudo update-ca-certificatesnhư được đề cập trong câu trả lời của Telegraphers. Bạn sẽ thấy trong đầu ra mà chứng chỉ đã được thêm vào.


4
Điều này cũng làm việc với tôi trên Ubuntu 16.04. Con đường trong câu trả lời được chấp nhận không làm việc cho tôi.
Plazgoth

Đây phải là một câu trả lời được chấp nhận, đây là một giải pháp hoạt động cho máy chủ Ubuntu 16.04 LTS.
Lasitha Benaragama

15

Phần mở rộng .crt, .pem và .cer có thể hoán đổi cho nhau, chỉ cần thay đổi phần mở rộng tên tệp, chúng có cùng dạng. Thử đi:

$ 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

Mặc dù điều này là đúng, nhưng nó không có ích. Nhưng trong tương lai nó có thể giúp mọi người
Universal Electrical

Tôi đã thêm một dòng nữa, hãy thử điều đó để khiến git tin vào chứng chỉ của bạn, lưu ý rằng tôi đã thay đổi cer. thay vì .pem trong hai trong số 4 bước thay vì .crt. @Unicorns rất rất ngon
Mike

3
Nếu tệp .CER của bạn là nhị phân (định dạng DER) thì bạn không thể thay đổi tiện ích mở rộng. Sử dụng openssl(1)để chuyển đổi chứng chỉ sang định dạng PEM. Chạy:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
dùng Arch

1
@Archuser Có lẽ lệnh đúng là đây:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi

5

Tôi sử dụng phần tổng hợp sau đây của các câu trả lời trước:

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

Nó có thể được sửa đổi để là một lót.

Thường cả hai site.example.comexample.comlà cùng một tên máy chủ.


3

Tôi đọc tất cả các giải pháp và giải quyết như thế này;

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

Tôi đã gặp một vấn đề tương tự khi cài đặt chứng chỉ trong firefox và google chrome hoạt động nhưng Cập nhật trong thiết bị đầu cuối sudo apt-get updatekhông hoạt động và gây ra 403 lỗi IP bị cấm. Tôi đã quá có một tập tin sample.cer. Vì vậy, về cơ bản tôi phải chuyển đổi nó thành .crt trước.

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

Tuy nhiên, trong khi làm, sudo dpkg-reconfigure ca-certificatestôi không thể tìm thấy chứng chỉ cần thiết. Vấn đề với tôi là tôi đã sao chép chứng chỉ không đúng chỗ.

Thay vì sao chép nó tại $/usr/share/ca-certificates tôi đã sao chép nó tại $/usr/local/share/ca-certificates Nhưng bằng cách đặt nó vào đúng chỗ đã giải quyết vấn đề của tôi. Nhưng tôi vẫn không thể cập nhật các gói hoặc cài đặt các gói mới.

Sửa nhanh (cho tôi vào):

Sử dụng ftp thay vì http

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

và lệnh trên đã làm việc. Vui lòng tạo một bản sao của tệp records.list trước khi thực hiện các thay đổi.

Nếu bất cứ điều gì không rõ ràng hoặc không phù hợp xin vui lòng sửa cho tôi.


0

Để truy cập trang web với https, cho dù bạn đang sử dụng trình duyệt CLI hay GUI, bạn không cần chứng chỉ shool của mình.

Để sử dụng gitqua http (s), bạn cần đăng ký khóa công khai trong cài đặt hồ sơ của mình trên GitHub .

Thêm infos ở đây . Thay đổi hồ sơ GitHub của bạn ở đây .


Thử đi:

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

Siêng năng hoạt động mà không có giấy chứng nhận bổ sung.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.