【问题标题】:how to make web application accessible from https in java [closed]如何在java中从https访问Web应用程序[关闭]
【发布时间】:2012-01-31 10:13:38
【问题描述】:

我想让 web 应用程序可以从 java 中的 https 访问。我是这个领域的新手。我从一些博客中读到它可以通过生成某种身份证书来实现。有没有提供免费证书的网站?我可以参考任何博客或网站。

谢谢

【问题讨论】:

  • 如何配置 SSL 将取决于您使用的网络服务器(例如 Tomcat、Apache)。您可以使用自签名证书,但您的用户会收到有关证书的警告。您需要从受信任的 CA(证书颁发机构)购买证书。
  • 不再需要购买它,因为您可以使用免费服务来获取有效证书。以下是如何使用 Let's Encrypt 服务的 Java 特定说明:vaadin.com/blog/-/blogs/lazy-loading-with-vaadin-8

标签: java web-applications https web ssl-certificate


【解决方案1】:

我意识到这是一个非常古老的线程,但现在您可以从名为 Let's Encrypt 的 CA(证书颁发机构)获得免费证书。使用 Certbot ACME 协议客户端(自动证书管理环境)https://certbot.eff.org/ 获取证书非常容易。客户端需要您的服务器中的 root 访问权限。

1) 使用 certbot-auto 脚本安装 Cerbot

wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto
./certbot-auto --help

2) 使用独立插件或 webroot 插件获取许可证。 Standalone 将小型服务器打开到端口 80 或 443,因此任何一个端口都必须是空闲的。 Webroot 使用现有的正在运行的服务器。使用独立运行命令

certbot-auto certonly --standalone --standalone-supported-challenges http-01 -d yourdomain.com

使用 webroot 插件和独立插件,certonly 选项 certbot 将获取证书并将其存储到 /etc/letsencrypt/live/。

3) Let's Encrypt 的证书是短暂的(只有 90 天),所以记得更新这些证书

certbot-auto renew

4) 获得证书后,需要将其转换为 PKCS12 格式并将其存储到 Java 密钥库中。

openssl pkcs12 -export -in /etc/letsencrypt/live/yourdomain.com/fullchain.pem -inkey /etc/letsencrypt/live/yourdomain.com/privkey.pem -out /etc/letsenscrypt/live/yourdomain.com/pkcs.p12 -name mytlskeyalias -passout pass:mykeypassword

keytool -keystore /path/to/my/keystore -delete -alias ‘mytlskeyalias’ -storepass ‘mystorepassword’

keytool -importkeystore -deststorepass mystorepassword -destkeypass mykeypassword -destkeystore /path/to/my/keystore -srckeystore /etc/letsencrypt/live/mydomain.com/pkcs.p12 -srcstoretype PKCS12 -srcstorepass mykeypassword -alias mytlskeyalias

所有步骤在https://vaadin.com/blog/-/blogs/enabling-https-in-your-java-server-using-a-free-certificate中有更详细的描述

然后按照 Nikola Yovchev 的链接获取特定 Servlet 容器以启用 SSL/TLS。

【讨论】:

  • 关于第 4 步:它在一个系统上对我来说按原样工作。另一方面,我会收到错误“javax.crypto.BadPaddingException:给定最终块未正确填充”。但是由于 keytool 还说“jks 格式专有 - 使用 pkcs12”作为警告,我尝试跳过 keytool -importkeystore 步骤,并使用由 openssl 生成的 pkcs.p12 文件,效果很好! (不过,如果您需要使用多个证书,这种方法可能不起作用。)
【解决方案2】:

您需要获得 CA(证书颁发机构)批准的 SSL 证书,这样您的客户在使用您的 web 应用程序时就不会在浏览器中收到警告。要获得这样的证书,您通常需要向 CA 支付一些钱。但是,出于测试目的,您可以使用自签名证书。

您可以生成自签名证书并将其放在您的服务器上。稍后您可以将其替换为真实证书。如果您已经拥有真正的证书,请跳到我回答的第 2 步。生成自签名证书的方法不同,但基本上您必须执行以下操作(抽象):

1.生成自签名证书:

您可以为此使用许多工具和程序,但不知何故,我发现生成自签名证书的最流行方法是:

a) java 的 keytool - http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html b) openssl - http://www.sslshopper.com/article-most-common-openssl-commands.html

这两种方法是绝对等价的,看你用哪一种(我用的是 openssl)

2。将此证书放入您的 servlet 容器/应用程序服务器中。

有许多 servlet 容器和应用程序服务器,即使在不同版本的服务器/容器和所选配置之间,放置证书的说明也会有所不同。下面我将列出我认为现在最受年轻人欢迎的那些......

a) tomcat 7 - http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

b) glassfish - http://artur.ejsmont.org/blog/content/how-to-generate-self-signed-ssl-certificate-for-glassfish-v3-and-import-it-into-java-keyring

c) jbossWeb (Servlet 容器) - http://docs.jboss.org/jbossweb/3.0.x/ssl-howto.html

【讨论】:

    【解决方案3】:

    您将需要 SSL 证书来为 SSL 应用程序提供服务。 SSL 证书的问题在于它需要被浏览器信任,因此如果您让人们使用该应用程序,您需要从证书提供商那里获得真正的 SSL 证书,例如 Godaddy 或许多其他人。出于测试目的,您可以制作一个可以使用的“自签名”证书,但使用浏览器的客户端会收到警告,表明证书存在问题。

    没有办法免费获得真正的 SSL 证书。

    我相信,从这个答案中,您可以进行适当的谷歌查询,让您顺利上路。

    【讨论】:

    • @Francis:我不同意您的回答方式。到底什么是真正的 SSL 证书?如果您创建自签名 SSL 证书并将其配置为受信任,那么正如你所说的那样,是不是让它变得不真实?这取决于你信任谁以及谁是验证你的权威,但恕我直言,real 这个词不是一个好词。
    猜你喜欢
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2018-02-14
    • 1970-01-01
    • 2014-02-05
    • 2021-07-14
    • 1970-01-01
    相关资源
    最近更新 更多