2014-07-22 5 views
5

मैं वेब ऐप बनाने के लिए क्लोजर (रिंग और कंपोजर) का उपयोग कर रहा हूं और मुझे नहीं पता कि https से कहां से प्रारंभ करना है। मेरे पास एक पंजीकरण और लॉगिन है जिसे सुरक्षित करने की आवश्यकता होगी, फिर एक बार प्रमाणीकृत होने के बाद उन्हें https में रहना होगा।क्लोजर कंपोजर रिंग और https

मुझे सामान्य रूप से या क्लोजर ऐप के लिए विशेष रूप से https सेट अप करने पर एक अच्छा ट्यूटोरियल नहीं मिल रहा है। How do you enable https and http->https redirects in ring/compojure

करता है के रूप में अगर कोई https है और nginx सामने बैठते हैं और मेरे लिए वह सब का ख्याल रखना है कि मतलब मैं अपने compojure एप्लिकेशन लिख सकते हैं:

मैं इस सवाल का जवाब मिल गया?

उत्तर

7

हां, मानक प्रक्रिया को reverse proxy के रूप में रिंग आधारित वेबपैप के सामने nginx कार्य करना है। इसे सुरक्षित माना जाता है और इसे बनाए रखना आसान है क्योंकि यह अधिक मानक है। प्रत्येक clojure based site मुझे पता है कि यह इस तरह से करता है।

3

आमतौर पर एप्लिकेशन-स्तरीय कोड परवाह नहीं है कि यह HTTPS या HTTP है या नहीं। अक्सर यह एप्लिकेशन सर्वर या इसके सामने एक प्रॉक्सी द्वारा प्रदान किया जाता है। यदि आप परिचित हैं, तो आपके विकल्प जावा दुनिया में उतने ही समान हैं।

  1. आप जेट्टी एडाप्टर का उपयोग कर रहे हैं, यह ssl? और ssl-port विकल्प है। docs here और related blog post here देखें।

  2. आप अपने रिंग ऐप को सादे HTTP में चला सकते हैं और इसके सामने Nginx या Apache जैसे प्रॉक्सी रख सकते हैं। प्रॉक्सी आपके ऐप पर सादे HTTP के रूप में HTTPS और अग्रेषित अनुरोधों को लागू करेगा।

2

रिवर्स प्रॉक्सी दृष्टिकोण सबसे आम विकल्प प्रतीत होता है। हालांकि, एक 'प्रयोग' के रूप में मैंने केवल अंगूठी, जेटी कंपोजर आदि का उपयोग https के साथ किया। यह मुश्किल नहीं है।

  1. सबसे पहले आपको स्वयं हस्ताक्षरित प्रमाणपत्र उत्पन्न करने के लिए कीटोल का उपयोग करने और उसे एक नई कीस्टोर में स्थापित करने की आवश्यकता है। कीटोल डॉक्स एक बहुत अच्छा है और आप इस प्रक्रिया के माध्यम से चल सकते हैं। ध्यान दें कि यदि आप स्वयं हस्ताक्षरित प्रमाण का उपयोग करते हैं, तो आपको यह कहने के लिए अधिकांश ब्राउज़र के साथ अपवाद नियम जोड़ना होगा कि आप उस प्रमाणपत्र पर भरोसा करते हैं।

  2. कॉपी कुंजीस्टोर अपनी परियोजना पेड़

  3. अद्यतन घाट कॉन्फिग मापदंडों ssl, ssl पोर्ट, कीस्ट्रोक फ़ाइल और कीस्टोर पासवर्ड निर्दिष्ट करने की जड़ में बनाई गई फ़ाइल।

  4. अपने project.clj को अंगूठी/अंगूठी-चूक पैकेज जोड़ें

  5. मजबूर करने के लिए HTTPS कनेक्शन अर्थात https करने के लिए http कनेक्शन पुनर्निर्देशित सुरक्षित साइट-चूक विन्यास विकल्प के साथ रैप-चूक मिडलवेयर जोड़ें।

इस सेटअप मैं उत्पादन में उपयोग के लिए सिफारिश करेंगे नहीं है, लेकिन मैं यह भी ngix कॉन्फ़िगर करने के लिए जब विकास आदि कर सबसे कठिन हिस्सा Keytool प्रक्रिया के माध्यम से काम कर रहा था की तुलना में सरल पाया। हालांकि, केवल दस्तावेज़ों और उदाहरणों का पालन करने से आपको पर्याप्त सुविधाएं मिलती हैं बशर्ते आप सभी विकल्पों द्वारा अभिभूत होने की अनुमति न दें - बस इसे सरल रखें।

कुछ

तरह
keytool -genkeypair \ 
     -keystore $SSL_DIR/$KS_NAME \ 
     -keypass $PASSWORD \ 
     -storepass $PASSWORD \ 
     -keyalg RSA -keysize 2048 \ 
     -alias root \ 
     -ext bc:c \ 
     -dname "$ROOT_CN" 

echo "CA Key" 
keytool -genkeypair \ 
     -keystore $SSL_DIR/$KS_NAME \ 
     -alias ca \ 
     -ext bc:c \ 
     -keypass $PASSWORD \ 
     -keyalg RSA -keysize 2048 \ 
     -storepass $PASSWORD \ 
     -dname "$CA_CN" 

echo "Server Key" 
keytool -genkeypair \ 
     -keystore $SSL_DIR/$KS_NAME \ 
     -alias server \ 
     -keypass $PASSWORD \ 
     -storepass $PASSWORD \ 
     -keyalg RSA -keysize 2048 \ 
     -dname "$SERVER_CN" 

echo "Root Cert" 
keytool -keystore $SSL_DIR/$KS_NAME \ 
     -storepass $PASSWORD \ 
     -alias root \ 
     -exportcert \ 
     -rfc > $SSL_DIR/root.pem 

echo "CA Cert" 
keytool -storepass $PASSWORD \ 
     -keystore $SSL_DIR/$KS_NAME \ 
     -certreq \ 
     -alias ca | keytool -storepass $PASSWORD \ 
          -keystore $SSL_DIR/$KS_NAME \ 
          -gencert \ 
          -alias root \ 
          -ext BC=0 \ 
          -rfc > $SSL_DIR/ca.pem 

echo "Import CA cert" 
keytool -keystore $SSL_DIR/$KS_NAME \ 
     -storepass $PASSWORD \ 
     -importcert \ 
     -alias ca \ 
     -file $SSL_DIR/ca.pem 

echo "Server Cert" 
keytool -storepass $PASSWORD \ 
     -keystore $SSL_DIR/$KS_NAME \ 
     -certreq \ 
     -alias server | keytool -storepass $PASSWORD \ 
           -keystore $SSL_DIR/$KS_NAME \ 
           -gencert \ 
           -alias ca \ 
           -rfc > $SSL_DIR/server.pem 



echo "Import Server Cert" 
cat $SSL_DIR/root.pem $SSL_DIR/ca.pem $SSL_DIR/server.pem | \ 
    keytool -keystore $SSL_DIR/$KS_NAME \ 
      -storepass $PASSWORD \ 
      -keypass $PASSWORD \ 
      -importcert \ 
      -alias server 
1

एक अन्य समाधान nginx-clojure (http://nginx-clojure.github.io) है जिसके द्वारा आप सीधे nginx पर अंगूठी एप्लिकेशन तैनात कर सकते हैं की कोशिश करना है। nginx https चीजों को अधिक कुशलता से कर सकता है।

यहाँ nginx.conf

http { 

### jvm dynamic library path 
jvm_path '/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/libjvm.so'; 

### my app jars e.g. clojure-1.5.1.jar , groovy-2.3.4.jar ,etc. 
jvm_var my_other_jars 'my_jar_dir/clojure-1.5.1.jar'; 

### my app classpath, windows user should use ';' as the separator 
jvm_options "-Djava.class.path=jars/nginx-clojure-0.3.0.jar:#{my_other_jars}"; 

server { 
    listen 80 default deferred; 
    server_name example.com; 

    ###redirect to https 
    rewrite ^/(.+) https://example.com/$1 permanent; 
} 

server { 
    listen 443 ssl; 
    server_name example.com; 

    ssl_certificate /opt/mycert/my-unified.crt; 
    ssl_certificate_key /opt/mycert/my.key; 


    location /myapp { 
    content_handler_name 'my/ringapp'; 
    } 

} 

} 

आप http://nginx.org/en/docs/http/configuring_https_servers.html

0

इसका बहुत सरल से SSL सर्वर विन्यास के बारे में अधिक जानकारी प्राप्त कर सकते हैं के बारे में एक उदाहरण है। यदि आप अपने वेब एप्लिकेशन में HTTPS समर्थन सक्षम करना चाहते हैं तो बस निम्न कार्य करें:

  1. Keytool नामक एक linux उपकरण का उपयोग कर एक जावा KeyStore (.jks) फ़ाइल जेनरेट।

    { : ssl

  2. अपने project.clj फ़ाइल की अंगूठी मानचित्र में, निम्न जोड़ सकता हूँ? सच : ssl पोर्ट 8443 : कुंजी पासवर्ड "कुंजीस्टोर पासवर्ड" }

  3. आग अप सर्वर: कुंजीस्टोर "JKS फ़ाइल का पथ"। अब आपका वेब ऐप HTTPS सक्षम है।

मैं जब तक मैं अपनी साइन-इन का परीक्षण करने के सोशल मीडिया कोड है जो स्पष्ट रूप से अधिक HTTPS को प्रमाणित करने के लिए किया था और यह मेरे लिए चाल किया था का उपयोग कर कोशिश कर रहा था एक ऐसी ही समस्या थी।

0

आप रिंग मिडलवेयर सेट कर सकते हैं जो एसएसएल का उपयोग करने के लिए सभी अनुरोधों को मजबूर करेगा। ऐसा करने का एक आसान तरीका ring-defaults लाइब्रेरी का उपयोग करना है।

अंगूठी-चूक प्रलेखन से:

चार विन्यास मिडलवेयर के साथ शामिल कर रहे हैं
- एपीआई-चूक
- साइट-चूक
- सुरक्षित-api-चूक
- secure- साइट-डिफ़ॉल्ट
...
"सुरक्षित" डिफ़ॉल्ट एसएसएल को मजबूर करता है। अनएन्क्रिप्टेड HTTP यूआरएल समकक्ष HTTPS यूआरएल पर रीडायरेक्ट किए जाते हैं, और असुरक्षित चैनलों पर संवेदनशील जानकारी भेजने वाले ब्राउज़र को रोकने के लिए विभिन्न शीर्षलेख और झंडे भेजे जाते हैं।

भी ध्यान रखें:

  • लिए, एसएसएल के बिना स्थानीय विकास सक्षम आप सेट कर सकते हैं जो अंगूठी-चूक आप एक वातावरण चर के आधार का उपयोग निर्धारित करने के लिए। Environ इसके साथ मदद करता है।
  • एसएसएल को लोड बैलेंसर या प्रॉक्सी के पीछे काम करने के लिए सक्षम करने के लिए, आपको रिंग-डिफॉल्ट मानचित्र में सत्य को प्रॉक्सी करना होगा।

यहाँ सामान्य विचार है:

(ns my-app 
    (:require [ring.middleware.defaults :refer :all] 
      [environ.core :refer [env]])) 

(defroutes app-routes 
    (GET "/" [] "home page")) 

(def app 
    (-> app-routes 
    (wrap-defaults (if (= (env :environment) "dev") 
        site-defaults 
        (assoc secure-site-defaults :proxy true)))) 

मैं nginx के बारे में पता नहीं है, लेकिन मुझे लगता है यह एक एप्लिकेशन Heroku लिए तैनात किए गए के लिए काम किया है।

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