2012-02-13 15 views
17

मैं एक सबवर्जन-आधारित बिल्ड सिस्टम का प्रबंधन कर रहा हूं और हम सर्वर के लिए एक स्व-हस्ताक्षरित एसएसएल का उपयोग करते हैं। इसलिए समय-समय पर, हमें असफलता मिलती है क्योंकि एक नई मशीन जोड़ दी गई है और यह चेकआउट नहीं कर सकता क्योंकि यह उस मशीन के लिए पहली बार svn सर्वर से संपर्क करने के लिए है।उपversण में एसएसएल प्रमाणपत्र सत्यापन बाईपास

त्रुटि संदेश की तरह है:

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? 

क्या मैं आम तौर पर जरूरत --insecure पैरामीटर कर्ल करने के लिए की तरह कुछ है। अभी, हमारा कामकाज केवल कुछ सरल svn कमांड करना है ताकि हम "स्थायी रूप से" जवाब दे सकें और समस्या हल हो जाएगी ... कम से कम जब तक एसएसएल प्रमाण पत्र बदलता/नवीनीकृत नहीं हो जाता है या निर्माण एक और नए पर किया जाता है मशीन।

क्या किसी ने इस समस्या को हल किया है?

अग्रिम धन्यवाद :)

उत्तर

21

मुझे लगता है कि आपके पास दो विकल्प हैं; सभी सावधानी पानी में गिर फेंक और कमांड लाइन से विश्वास-server-प्रमाणपत्र और गैर इंटरैक्टिव की स्थापना:

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') 

और अन्य विकल्प यदि प्रमाणपत्र पहले बदल गया है की जाँच करें और मान्य करने के लिए -showcerts साथ openssl s_client की तरह कुछ का उपयोग करने के लिए है एसवीएन कॉल के लिए - और फिर या तो बहुत साफ तरीके से निरस्त करें और एक इंसान को निर्णय कॉल करें, या कुछ गंदे - जैसे- showcert का उपयोग ~/.subversion में ज्ञात प्रमाण को अद्यतन करने के लिए करें।

या तो मामले में - nonintuitive जादू की बिट ~/.subversion/प्रमाणन/svn.ssl.server/<serverrecord में> फाइलों पर है - प्रमाणपत्र आपके लिए आवश्यक जानकारी निकालने के लिए:

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

या

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

और फिर -CApath साथ openssl s_client का उपयोग करें या अगर यह बदलाव की और/या -showcert का उपयोग जांच को पार करने के लिए है कि प्रमाणपत्र के साथ सत्यापित कर सकते हैं की तरह कुछ। (नोट: विकल्प perl -e 'एमआईएमई का उपयोग करें :: बेस 64; प्रिंट decode_base64 (शामिल हों ("",));' यदि आवश्यक हो तो base64decode के लिए)।

+0

धन्यवाद Dirk। बस वही है जो मैं देख रहा हूं :) – icasimpan

1

एक और विकल्प उम्मीद का उपयोग करना है। उम्मीद का उपयोग करके आप प्रमाण पत्र स्वीकार करने वाले उपयोगकर्ता को अनुकरण कर सकते हैं। यह काम करेगा जब अन्य विकल्प नहीं होगा। मैंने इसे बनाया ताकि मैं एक डॉकरफ़ाइल में svn से कोड डाउनलोड कर सकूं।

#!/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

दो संभावित परिदृश्यों हैं: प्रमाणपत्र अविश्वसनीय है, लेकिन वैध है (यानी, उदाहरण के लिए एक वैध स्व-हस्ताक्षरित प्रमाणपत्र), या प्रमाण पत्र (जैसे जब आप आईपी या द्वारा अपने लैन पर एक मशीन तक पहुँच रहे हैं के रूप में अमान्य है एफक्यूडीएन द्वारा अपने लैन के बाहर से और उस मशीन के पास इसके प्रतीकात्मक नाम पर जारी प्रमाणपत्र है)। svn क्लाइंट दूसरे प्रकार के प्रमाणपत्र पर भरोसा नहीं करेगा भले ही --trust-server-certator विकल्प का उपयोग कर। दूसरे परिदृश्य में, मेरा एकमात्र विकल्प मैं सोच सकता हूं कि मेजबान फ़ाइल प्रविष्टि का उपयोग उपनाम के लिए किया जाता है जो मशीन के आईपी को इसके आंतरिक नाम पर उपयोग करता है।

परिदृश्य 2 कि मैं एक बार सामना करना पड़ा जब VisualSVN सभी डिफ़ॉल्ट विकल्प के साथ स्थापित किया है और मशीन का प्रतीकात्मक नाम करने के लिए एक प्रमाणपत्र है कि यह खोज की जनरेट किया गया था की

उदाहरण:

लैन मशीन नाम machine1 SVN सर्वर चलाता है और यह एक प्रमाण पत्र है स्थापित किया गया है कि मशीन 1 जारी किया गया था। आप अपने आईपी पते के माध्यम से एसवीएन तक पहुंचने और अमान्य प्रमाणपत्र त्रुटि प्राप्त करने का प्रयास कर रहे हैं।

आपको यह त्रुटि भी मिल जाएगी यदि MACHINE1 FQDN द्वारा आपके LAN के बाहर से पहुंच योग्य है उदाहरण के लिए svn.domain.com और आप FQDN से कनेक्ट हो रहे हैं।

दोनों मामलों में svn अवैध प्रमाणपत्र त्रुटि फेंक देगा।

आप मशीन का IP पता (लैन या बाहरी जहां से यह तक पहुँच रहे हैं के आधार पर) नाम प्रमाणपत्र को मैप करने के hosts फाइल करने के लिए एक प्रवेश जोड़ सकते हैं करने के लिए जारी किया गया था:

123.45.67.89 MACHINE1 

और उपयोग SVN इस स्थिति को रोकने के लिए https://machine1/svn/ के माध्यम से।

संबंधित मुद्दे