我正在使用Clojure (ring和compojure)来构建一个web应用程序,但我不知道从哪里开始使用https。我有一个注册和登录,将需要保护,然后一旦他们通过认证,他们将需要留在https。
我似乎找不到一个好的教程来设置一般的https或者专门针对clojure应用的设置。
我找到了这个答案:How do you enable https and http->https redirects in ring / compojure
这是否意味着我可以编写我的compojure应用程序,就像没有https一样,让nginx坐在前面为我处理所有这些事情?
发布于 2015-01-20 06:07:15
反向代理方法似乎是最常见的选择。然而,作为一个“实验”,我研究了在https中使用just ring,jetty compojure等。这并不难。
-
这不是我推荐用于生产使用的设置,但我发现它比在进行开发等工作时还必须配置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发布于 2014-07-23 17:05:24
通常,应用程序级别的代码并不关心它是HTTPS还是HTTP。大多数情况下,它是由应用服务器或它前面的代理提供的。如果您熟悉,那么您的选择与Java世界中的选择几乎相同。
ssl?和ssl-port选项。related blog post here.发布于 2015-01-23 18:09:11
另一个解决方案是尝试nginx-clojure (http://nginx-clojure.github.io),通过它你可以直接在nginx上部署ring app。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获取有关SSL服务器配置的更多详细信息。
https://stackoverflow.com/questions/24897037
复制相似问题