【问题标题】:How to install letsencrypt free ssl to glassfish 4.x server如何将letsencrypt免费ssl安装到glassfish 4.x服务器
【发布时间】:2020-12-23 11:30:46
【问题描述】:

我已经扫描了 SO,发现没有关于如何在 glassfish 上安装letsencrypt.org SSL 证书的详细说明,特别是在本教程中,我将使用 glassfish 4.1.2 build 1。经过大量试验和错误后,我能够整理出以下指南。所以我希望可以问和回答我自己的问题。

在本教程中,我将使用 Ubuntu 16.04 LTS 服务器,通过我的 Ubuntu 16.04 LTS 桌面进行 Shell 访问。

【问题讨论】:

    标签: ssl glassfish lets-encrypt glassfish-4.1


    【解决方案1】:

    visit certbot and follow the instructions below to setup your system

    安装

    在 Ubuntu 系统上,Certbot 团队维护一个 PPA。一旦你把它添加到你的 存储库列表,您需要做的就是 apt-get 以下包。

    $ sudo apt-get install software-properties-common
    $ sudo add-apt-repository ppa:certbot/certbot
    $ sudo apt-get update
    $ sudo apt-get install certbot 
    

    开始

    由于您的服务器架构尚不支持自动安装 您必须使用 certonly 命令来获取您的证书。

    $ sudo certbot certonly
    

    终端将输出

    Saving debug log to /var/log/letsencrypt/letsencrypt.log
    
    How would you like to authenticate with the ACME CA?
    1: Place files in webroot directory (webroot)
    2: Spin up a temporary webserver (standalone)
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
    

    我们选择1中的第一个选项键并按回车

    终端将输出

    Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
    Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
    to cancel):yoursite.com www.yoursite.com
    Obtaining a new certificate
    Performing the following challenges:
    http-01 challenge for yoursite.com
    http-01 challenge for www.yoursite.com
    

    终端将输出

    Select the webroot for yoursite.com:
    
    
    1: Enter a new webroot
    Press 1 [enter] to confirm the selection (press 'c' to cancel): 1
    Input the webroot for yoursite.com: (Enter 'c' to cancel):/home/yourUsername/glassfish4/glassfish/domains/domain1/docroot
    
    Select the webroot for www.yoursite.com:
    
    
    1: Enter a new webroot
    2: /home/yoursite/glassfish4/glassfish/domains/domain1/docroot
    
    
    Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
    Waiting for verification...
    Cleaning up challenges
    Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem
    Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem
    

    终端将输出

    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/yoursite.com/fullchain.pem. Your cert will
       expire on 2017-08-21. To obtain a new or tweaked version of this
       certificate in the future, simply run certbot again. To
       non-interactively renew *all* of your certificates, run "certbot
       renew"
    

    自动续订

    您系统上的 Certbot 软件包附带一个 cron 作业,该作业将在您的证书到期之前自动更新您的证书。由于 Let's Encrypt 证书的有效期为 90 天,因此强烈建议您利用此功能。您可以通过运行以下命令来测试证书的自动续订:

    certbot renew --dry-run
    

    使以下脚本可以自动将证书导入 glassfish

    进一步阅读

    https://community.letsencrypt.org/t/importing-letsencrypt-into-java-and-glassfish/9711

    现在我们导入证书。 制作以下脚本并将其保存为yourscriptname.sh 以自动化该过程,然后使用命令运行它

    $ sh yourscriptname.sh
    
    #!/bin/sh
    
    DOMAIN=yoursite.com
    #note that changeit is the default keystore password
    KEYSTOREPW=changeit
    GFDOMAIN=/home/yourUsername/glassfish4/glassfish/domains/domain1
    LIVE=/etc/letsencrypt/live/$DOMAIN
    
    mkdir etc
    cd etc
    
    sudo openssl pkcs12 -export -in $LIVE/cert.pem -inkey $LIVE/privkey.pem -out cert_and_key.p12 -name myalias -CAfile $LIVE/chain.pem -caname root -password pass:$KEYSTOREPW
    sudo keytool -importkeystore -destkeystore keystore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -alias myalias -srcstorepass $KEYSTOREPW -deststorepass $KEYSTOREPW -destkeypass $KEYSTOREPW
    sudo keytool -import -noprompt -trustcacerts -alias root -file $LIVE/chain.pem -keystore keystore.jks -srcstorepass $KEYSTOREPW -deststorepass $KEYSTOREPW -destkeypass $KEYSTOREPW
    
    sudo openssl pkcs12 -export -in $LIVE/fullchain.pem -inkey $LIVE/privkey.pem -out pkcs.p12 -name glassfish-instance -password pass:$KEYSTOREPW
    sudo keytool -importkeystore -destkeystore keystore.jks -srckeystore pkcs.p12 -srcstoretype PKCS12 -alias glassfish-instance -srcstorepass $KEYSTOREPW -deststorepass $KEYSTOREPW -destkeypass $KEYSTOREPW
    sudo openssl pkcs12 -export -in $LIVE/fullchain.pem -inkey $LIVE/privkey.pem -out pkcs.p12 -name s1as -password pass:$KEYSTOREPW
    sudo keytool -importkeystore -destkeystore keystore.jks -srckeystore pkcs.p12 -srcstoretype PKCS12 -alias s1as -srcstorepass $KEYSTOREPW -deststorepass $KEYSTOREPW -destkeypass $KEYSTOREPW
    
    sudo keytool -list -keystore keystore.jks -storepass $KEYSTOREPW
    
    sudo cp -f keystore.jks $GFDOMAIN/config/
    
    sudo service glassfish stop
    sudo service glassfish start
    
    cd ..
    sudo rm -rf etc
    

    如果您需要更改密钥库密码

    使用 keytool 命令。如果它不起作用,您可能必须 cd 到它在您的 glassfish-install-dir/glassfish/domains/domain1/config 目录中的路径并在该目录中运行命令。

    keytool -storepasswd -keystore /path/to/keystore
    Enter keystore password:  changeit
    New keystore password:  new-password
    Re-enter new keystore password:  new-password
    

    成功导入证书并重新启动 glassfish 服务器后,SSL 与已安装的 Web 应用程序一起工作,但不幸的是,我无法从浏览器登录到 glassfish 管理控制台,尽管 asadmin tool 仍然有效。

    解决上述更改后无法登录管理控制台

    我们需要将 wget 命令添加到我们的脚本中,以从recent trusted ca revisions from mozilla 下载每个出现日期的最新 CA 文件修订版

    将以下内容添加到命令sudo service glassfish stop 正上方的yourname.sh 脚本以解决问题。

    wget https://curl.haxx.se/ca/cacert-2017-01-18.pem --no-check-certificate -O cacert.pem
    
    PEM_FILE=cacert.pem
    KEYSTORE=cacerts.jks
    
    CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l)
    
    for N in $(seq 0 $(($CERTS -1))); do
        ALIAS="${PEM_FILE%.*}-$N"
        cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" |
        keytool -noprompt -import -trustcacerts \
                -alias $ALIAS -keystore $KEYSTORE -storepass $KEYSTOREPW
    done
    sudo keytool -list -keystore keystore.jks -storepass $KEYSTOREPW
    sudo keytool -list -keystore cacerts.jks -storepass $KEYSTOREPW
    
    if [ ! -f $GFDOMAIN/config/keystore-orig.jks ]; then
    echo "Backing up original files..."
    sudo cp -f $GFDOMAIN/config/keystore.jks $GFDOMAIN/config/keystore-orig.jks
    sudo cp -f $GFDOMAIN/config/cacerts.jks $GFDOMAIN/config/cacerts-orig.jks
    fi
    echo "Updating certificates..."
    sudo cp -f keystore.jks $GFDOMAIN/config/keystore.jks
    sudo cp -f cacerts.jks $GFDOMAIN/config/cacerts.jks
    
    cd ..
    
    echo stop and restart glassfish domain to complete
    
    cd ..
    sudo rm -rf etc
    

    我希望这可以帮助大家欢呼!

    【讨论】:

    • 执行此操作后,我经常在管理面板上收到身份验证失败。我仍然可以使用 change-admin-password 更改管理员密码,所以我确信这些值是正确的,我通过 localhost 和外部计算机验证失败
    • 我正在在线部署我开发的本地网络系统(在 glassfish 4.1 上运行 sprind mvc 和 jsp),以便我们的卫星办公室也可以使用它。我已经通过带有端口转发的静态 IP 部署了它。意思是,我没有任何域,也无权访问仅 shell cmd。我的服务器仅在 windows 和 glassfish 中运行。我希望外部访问更安全。我已经尝试了提供的 https 访问,但仍然出现不安全线路的警告。那么,我该如何执行此操作或在我的设置中遵循此操作?我知道这是可能的,但我只是傻眼了。请帮帮我。
    • 我遵循了本指南,但我的服务器由于某种未知原因而中断。我没有为控制台做最后一部分。为了回滚,我删除了 domain1/config 中的 keystore.jks 但仍然无法访问管理控制台。关于如何完全恢复到以前的工作状态的任何线索?
    • @Hamed 尝试清除位于glassfish-home/glassfish/domains/your-domain/logs 的服务器日志,然后尝试访问您的管理控制台。然后打开日志文件夹并给我们相关的日志,看看我们能提供什么帮助
    • 我用我的备份文件删除了 $GFDOMAIN/config/ 中的替换 keystore.jks。我的服务器已恢复。
    【解决方案2】:

    我创建了一个 Perl 脚本来帮助在 Glassfish 和 Payara 中安装 Let's Encrypt 证书。我已经成功地使用它不仅在大约五分钟内为多个域安装了证书,而且还通过 cron 作业自动更新了那些即将到期的证书。

    我所做的是将获取 Let's Encrypt 证书的过程分解为以下步骤,并非所有步骤都是必需的:

    1. 为特定的本地安装自定义脚本 1a。要为其创建证书的域列表 1b。 Glassfish/Payara 设置(它们位于您的文件系统中) 1c。 Glassfish/Payara 的密码
    2. 将 Glassfish/Payara 更改为侦听端口 80 和 443
    3. 生成 Let's Encrypt 证书密钥
    4. 确保密钥库密码与服务器密码匹配
    5. 创建密钥库
    6. 将创建的密钥库导入 Glassfish/Payara 密钥库
    7. 将新证书应用到 https 监听器
    8. 更新域 SSL 信息
    9. 设置(如有必要)服务器管理员密码。
    10. 设置 https 域

    此外,可以定期调用该脚本(通常通过“cron”)来检查是否有任何域需要更新,如果需要,自动更新它们。

    有关脚本,请参阅:https://github.com/hbrednek/letsencrypt_glassfish

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2021-03-05
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多