Clojure Compojure Ring和https

use*_*249 5 https clojure compojure ring

我正在使用Clojure(ring和compojure)来构建一个Web应用程序,我不知道从哪里开始使用https.我有一个需要保护的注册和登录,然后一旦他们通过身份验证,他们就需要保持https状态.

我似乎找不到一个关于一般设置https或专门设置clojure应用程序的好教程.

我找到了这个答案:如何在ring/compojure中启用https和http-> https重定向

这是否意味着我可以编写我的compojure应用程序,好像没有https并且让nginx坐在前面并为我处理所有这些事情?

Art*_*ldt 7

是的,标准程序是让nginx 在基于环的webapp之前充当反向代理.这被认为是安全的,并且更容易维护,因为它更标准.我所知道的每个基于clojure的网站都是这样做的.


Tim*_*m X 5

反向代理方法似乎是最常见的选择。然而,作为一个“实验”,我研究了只使用戒指、码头组合等和 https。没那么难。

  1. 首先,您需要使用 keytool 生成自签名证书并将其安装到新的密钥库中。keytool 文档非常好,可以引导您完成此过程。请注意,如果您使用自签名证书,则需要对大多数浏览器添加例外规则,以表明您信任该证书。

  2. 将创建的密钥库文件复制到项目树的根目录中

  3. 更新 jetty 配置参数以指定 ssl、ssl-port、密钥库文件和密钥库密码。

  4. 将 ring/ring-defaults 包添加到您的 project.clj

  5. 添加带有 secure-site-defaults 配置选项的 wrap-defaults 中间件以强制 https 连接,即将 http 连接重定向到 https。

这不是我推荐用于生产的设置,但我发现它比在进行开发等时还必须配置 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
Run Code Online (Sandbox Code Playgroud)