Tránh mật khẩu văn bản đơn giản trong http_proxy


7

Tôi đứng sau một bức tường lửa của công ty, nơi mang đến nhiều nỗi đau trong khu vực của các proxy. Có hai cách tiếp cận chính mà tôi đã tìm thấy để làm việc:

  1. Sử dụng Cntlm với chi phí không thể kết nối (từ dòng lệnh) với HTTPS và các vị trí SSH bên ngoài. (Cntlm cho phép bạn băm tên người dùng và mật khẩu của mình bằng PassNTLMv2 (do đó tránh văn bản thuần túy) và đặt http://localhost:3128/làm proxy của bạn sau đó chuyển hướng đến proxy "thực" của bạn. Như tôi đã đề cập, tôi không thể kết nối với HTTPS và SSH bên ngoài bằng phương pháp này.)
  2. Đặt tên người dùng và mật khẩu của tôi trong văn bản đơn giản trong http_proxybiến với chi phí có tên người dùng và mật khẩu của tôi trong văn bản thuần túy.

Rõ ràng, nếu bảo mật không phải là vấn đề đáng lo ngại, tôi chỉ cần thực hiện với tùy chọn 2.

Tôi đã tìm thấy một phần của một giải pháp, khi thực hiện điều này trong .babrunrc(Tôi sử dụng Babun, về cơ bản đó là Cygwin với một chút phụ, tương tự có thể là trong một .bashrchoặc .zshrcmặc dù)

export http_proxy="http://`echo "Y21hbjpwYXNzd29yZA==" | base64 -d`@20.20.20.20:20/"

Bằng cách này, mật khẩu của tôi ít nhất được mã hóa. Nếu ai đó đến máy tính của tôi và gõ echo $http_proxyhọ sẽ thấy mật khẩu của tôi, nhưng tôi không nghĩ có cách nào khác.

Có cách tiếp cận nào khác không? Hoặc có thể là một cách để mã hóa chuỗi trái ngược với mã hóa nó? Tôi sẽ không gõ một số mật khẩu khi tôi mở một dấu nhắc nếu không có cách nào xung quanh nó.


Tại sao bạn không sử dụng PASSLM, PASSNT, PASSNTLMv2từ trong /etc/cntlm.confvà lắng nghe cổng 3128? và xuất http_proxy/https_proxysanglocalhost:3128
Do đó,

@Thushi đây là ý của tôi khi sử dụng Cntlm. Vấn đề là khi sử dụng Cntlm tôi không thể kết nối với HTTPS hoặc SSH bên ngoài. Ví dụ, khi Maven cố lấy thứ gì đó từ kho lưu trữ HTTPS thì không thành công. Tôi đã xem xét điều này và tôi không chắc liệu đó có phải là một cái gì đó về proxy hay đơn giản là ngoài phạm vi của Cntlm. Có chuyển hướng cổng (đường hầm?) Mà tôi tin rằng sẽ hoạt động cho HTTPS nhưng tôi không muốn phải tạo một mục nhập cho mỗi liên kết HTTPS duy nhất tôi cần nhấn, tôi muốn có một cách tiếp cận không cần thêm đầu vào. Tôi sẽ sửa đổi để làm rõ rằng tôi đã thử đề xuất của bạn.
Thuyền trưởng Man

Câu trả lời:


7

Sử dụng base64 là vô ích, nó chỉ là một chuyển đổi đơn giản. Sử dụng mã hóa với khóa được lưu trữ cùng với dữ liệu được mã hóa cũng vô dụng vì nó vẫn chỉ là một chuyển đổi đơn giản. Nếu bạn lo lắng về việc ai đó có quyền truy cập vào tệp cấu hình của mình, thì bạn cần mã hóa bằng khóa không có trong tệp cấu hình của mình và điều đó có nghĩa là bạn sẽ phải nhập mật khẩu¹ khi đăng nhập.

Thay vì làm cho riêng bạn, hãy sử dụng một cơ chế mã hóa hiện có.

Trên Linux, nếu bạn đi với mã hóa tập tin, mã hóa thư mục home của bạn với eCryptfs , hoặc mã hóa toàn bộ đĩa với lớp mã hóa đĩa Linux (dm-crypt, cryptsetuplệnh), hoặc tạo một nhỏ mỗi tập tin hệ thống tập tin được mã hóa với EncFS . Trong trường hợp sau, có một tập lệnh gắn kết hệ thống tập tin encfs và sau đó chạy một tập lệnh được lưu trữ ở đó.

Trên Windows, đặt tệp trên TrueCrypt / VeraCrypt .

Ngoài ra, sử dụng trình quản lý mật khẩu (tất nhiên là đặt mật khẩu chính). Trình quản lý mật khẩu của Gnome (gnome-keyring) có thể được truy vấn từ dòng lệnh với secret-tooltiện ích. Seahorse cung cấp một GUI thuận tiện để khám phá và sửa đổi khóa và đặt mật khẩu chính.

secret-tool store --label='Corporate web proxy password' purpose http_proxy location work.example.com

export http_proxy="http://cman:$(secret-tool lookup purpose http_proxy location work.example.com)@192.0.2.3/"

D-Bus yêu cầu này, thường có sẵn theo mặc định trong Linux (hầu hết các môi trường máy tính để bàn hiện đại đều yêu cầu) nhưng cần phải được khởi động thủ công theo Cygwin (tôi không biết chính xác làm thế nào).

¹ hoặc cung cấp tài liệu bí mật, ví dụ như lưu trữ trên một thẻ thông minh.


openssl enc -aes-128-cbc -alưu trữ khóa cùng với dữ liệu được mã hóa như bạn nói không?
Thuyền trưởng Man

@CaptainMan Không, nhưng khóa được lấy từ mật khẩu theo cách quá dễ dàng để bắt buộc. Giống như băm mật khẩu, việc tạo khóa dựa trên mật khẩu nên được xử lý và chậm, nhưng openssl enckhông chậm. Nói chung, điều opensslnày thật kinh khủng và bạn không nên sử dụng nó trừ khi bạn biết chính xác những gì bạn đang làm (và thường là ngay cả sau đó): nó sẽ không cung cấp cho bạn bất kỳ manh mối nào cho dù những gì bạn đang làm có an toàn hay không.
Gilles 'SO- ngừng trở nên xấu xa'

@Giles khi tôi chạy secret-tool store --label='EIS domain password' domain EIS value passwordtôi gặp lỗi này :, (secret-tool:43544): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed <newline> secret-tool: Failed to execute child process "dbus-launch" (No such file or directory)có ý kiến ​​gì về vấn đề này không? Tôi đang sử dụng Cygwin.
Thuyền trưởng Man

@CaptainMan Ồ, xin lỗi, tôi hoàn toàn nhớ rằng bạn đang sử dụng Cygwin. Tôi nghĩ rằng bạn có thể sử dụng khóa Gnome trong Cygwin, bạn sẽ phải khởi chạy D-Bus theo cách thủ công ( dbus-launch, có thể đặt các DBUS_SESSION_BUS_ADDRESSbiến môi trường), nhưng tôi chưa bao giờ thực hiện điều đó nên có thể gặp một số khó khăn. Encfs và ecryptfs hoàn toàn không phải là một tùy chọn, nhưng bạn có thể sử dụng bộ chứa Truecrypt / Veracrypt.
Gilles 'SO- ngừng trở thành ác quỷ'

8

Tôi đã tìm thấy một giải pháp: thêm openssl enc -aes-128-cbc -a -dvào hỗn hợp. Tuy nhiên, như đã đề cập trong câu trả lời được chấp nhận , tùy chọn này có lẽ không an toàn lắm.

Đầu tiên, đặt kết hợp mật khẩu tên người dùng (hoặc mã hóa tương đương base64) vào đây,

echo "<put it here>" | openssl enc -aes-128-cbc -a

Nó sẽ nhắc mật khẩu hai lần. Mật khẩu này là mật khẩu bạn sẽ phải nhập mỗi lần http_proxyđược đặt.

Sau đó, trong .babunrc(hoặc bất cứ nơi nào bạn đặt nó),

export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d`@20.20.20.20:20/"

Nếu đầu vào được mã hóa base64, thay vào đó bạn sẽ cần điều này:

export http_proxy="http://`echo "<output from above command>" | openssl enc -aes-128-cbc -a -d | base64 -d`@20.20.20.20:20/"

Nếu <output from above command>có một dòng mới, \nsẽ làm việc cho nó.


Có cách nào để thêm nó vào keyring không?
Mashimom

@Mashimom Vâng, câu trả lời của Gilles cho thấy cách tiếp cận này.
Thuyền trưởng Man
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.