2012-02-13 44 views
17

Tôi đang quản lý hệ thống xây dựng dựa trên phiên bản phụ và chúng tôi sử dụng ssl tự ký cho máy chủ. Vì vậy, theo thời gian, chúng tôi nhận được xây dựng thất bại vì một máy mới đã được thêm vào và nó không thể kiểm tra vì nó là lần đầu tiên cho máy đó liên hệ với máy chủ svn.bỏ qua xác thực chứng chỉ ssl trong lật đổ

Các thông báo lỗi giống như:

icasimpan ~$ svn ls https://scm.myserver.com/trunk 
Error validating server certificate for 'https://scm.myserver.com:443': 
- The certificate is not issued by a trusted authority. Use the 
    fingerprint to validate the certificate manually! 
Certificate information: 
- Hostname: scm.myserver.com 
- Valid: from Mon, 05 Dec 2011 00:00:00 GMT until Tue, 11 Dec 2012 23:59:59 GMT 
- Issuer: Terms of use at https://www.verisign.com/rpa (c)10, VeriSign Trust Network, VeriSign, Inc., US 
- Fingerprint: c0:69:f6:67:8d:1f:d2:85:c1:94:9f:59:8e:81:cc:81:3d:1e:44:28 
(R)eject, accept (t)emporarily or accept (p)ermanently? 

Những gì tôi thường cần là một cái gì đó giống như tham số --insecure cuộn tròn. Ngay bây giờ, giải pháp của chúng tôi là chỉ cần thực hiện một số lệnh svn đơn giản để chúng tôi có thể trả lời "vĩnh viễn" và vấn đề sẽ được giải quyết ... ít nhất là cho đến khi chứng chỉ ssl được thay đổi/gia hạn hoặc xây dựng trên một máy móc.

Có ai đó đã giải quyết vấn đề này không?

Xin cảm ơn trước :)

Trả lời

21

Tôi đoán bạn có hai lựa chọn; ném tất cả các cảnh báo quá nhiệt tình và thiết lập sự tin tưởng-server-cert và không tương tác từ dòng lệnh:

svn help co 
.... snip.... 
--non-interactive  : do no interactive prompting 
--trust-server-cert  : accept unknown SSL server certificates without 
         prompting (but only with '--non-interactive') 

và tùy chọn khác là sử dụng một cái gì đó giống như openssl s_client với -showcerts để kiểm tra và xác nhận nếu các CERT đã thay đổi trước để gọi svn-và sau đó hoặc hủy bỏ rất sạch sẽ và để cho một con người thực hiện cuộc gọi phán xét, hoặc một cái gì đó bẩn - như sử dụng -showcert để cập nhật các cert được biết đến trong ~/.subversion.

Trong cả hai trường hợp - bit của ma thuật trực giấc là trên các tập tin trong ~/.subversion/auth/svn.ssl.server/<serverrecord> - để trích xuất các thông tin cert bạn cần:

cat <serverrecord> | grep ^MII | base64decode | openssl x509 -text -inform DER 

hoặc cái gì đó như

cat <serverrecord> | grep ^MII | base64decode | openssl x509 -text -inform DER -noout - out current-cert.pem 

và sau đó có thể sử dụng openssl s_client với -CApath hoặc xác minh bằng cert đó để xem nếu nó đã thay đổi và/hoặc sử dụng -showcert vượt qua kiểm tra. (Lưu ý: thay thế perl -e 'sử dụng MIME :: Base64; in decode_base64 (tham gia ("",));' cho base64decode nếu cần).

+0

Cảm ơn Dirk. Chỉ cần chính xác những gì tôi đang tìm :) – icasimpan

1

Một tùy chọn khác là sử dụng mong đợi. Sử dụng mong đợi bạn có thể mô phỏng một người dùng chấp nhận chứng chỉ. Nó sẽ hoạt động khi các tùy chọn khác sẽ không hoạt động. Tôi tạo ra điều này để tôi có thể tải về mã từ svn trong một Dockerfile.

#!/usr/bin/expect -f 

set svn_username [lindex $argv 0] 
set svn_password [lindex $argv 1] 
set svn_url [lindex $argv 2] 

spawn svn --username=${svn_username} --password=${svn_password} list ${svn_url} 
expect "(R)eject, accept (t)emporarily or accept (p)ermanently? " 
send -- "p\r" 
expect "Store password unencrypted (yes/no)? " 
send "no\r" 
expect -re "[email protected]*:\/#" 
0

Có hai kịch bản có thể: Giấy chứng nhận là không tin cậy, nhưng hợp lệ (tức là một cert hợp lệ tự ký chẳng hạn), hoặc giấy chứng nhận không hợp lệ (chẳng hạn như khi bạn đang truy cập vào một máy tính trên mạng LAN của bạn bằng cách chỉ IP hoặc từ bên ngoài mạng LAN của bạn bằng FQDN và máy đó có chứng chỉ được cấp cho tên biểu tượng của nó). svn client sẽ không tin tưởng loại thứ hai của cert ngay cả khi sử dụng tùy chọn --trust-server-certificate. Trong kịch bản thứ 2, lựa chọn duy nhất của bạn mà tôi có thể nghĩ là sử dụng một mục nhập tệp máy chủ để đặt bí danh IP của máy đó thành tên nội bộ của nó.

Minh họa của kịch bản 2 mà tôi từng phải đối mặt khi VisualSVN đã được cài đặt với tất cả các tùy chọn mặc định và tạo ra một cert tên mang tính biểu tượng của máy tính mà nó phát hiện ra:

tên máy LAN machine1 chạy máy chủ SVN và nó có một giấy chứng nhận cài đặt đã được cấp cho MACHINE1. Bạn đang cố gắng truy cập SVN qua địa chỉ IP của nó và nhận được lỗi chứng chỉ không hợp lệ.

Bạn cũng sẽ nhận được lỗi đó nếu có thể truy cập MACHINE1 từ bên ngoài mạng LAN của bạn bằng FQDN ví dụ svn.domain.com và bạn đang kết nối với FQDN.

Trong cả hai trường hợp, svn sẽ ném lỗi chứng chỉ không hợp lệ.

Bạn có thể thêm một mục vào file hosts để lập bản đồ địa chỉ của máy IP (LAN hoặc bên ngoài tùy thuộc vào nơi bạn đang truy cập nó từ) để chứng nhận tên đã được ban hành để:

123.45.67.89 MACHINE1 

và truy cập SVN qua số https://machine1/svn/ để tránh tình trạng này.

Các vấn đề liên quan