在本地主机上的 glassfish 4.0 上实现 ssl

Posted

技术标签:

【中文标题】在本地主机上的 glassfish 4.0 上实现 ssl【英文标题】:Implementing ssl on glassfish 4.0 on localhost 【发布时间】:2014-05-27 23:52:03 【问题描述】:

我正在使用 glassfish 服务器并实现可从 Web 或移动客户端使用的 Rest Web 服务。 我现在想使用 ssl 证书保护这些 web 服务并在客户端和服务器之间创建会话。我还没有购买任何域名或服务器空间并试图在我的本地机器上构建它。 如何在本地主机上为 glassfish 配置免费 ssl 证书。

谢谢, 帕万

【问题讨论】:

它不是已经为您预先配置了吗? 不确定,如何检查? 我必须让我的休息服务只能通过 https:// 【参考方案1】:

Hotcoder24,

据我从您的问题和评论中了解到的问题,您希望通过 HTTPS 与您的服务进行通信。当您使用应用程序服务器时,这很容易。实际上,这是通过 web.xml 文件中的配置完成的。

让我们从使用 maven 原型 jersey-quickstart-webapp 创建的简单 Web 应用程序开始,如 Jersey tutorial 中所述。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example -DarchetypeVersion=2.14

这将创建一个包含单个资源的 Web 应用程序,该资源可以部署到 Glassfish 服务器(生成一个战争文件)。

@Path("myresource")

公共类 MyResource

/**
 * Method handling HTTP GET requests. The returned object will be sent
 * to the client as "text/plain" media type.
 *
 * @return String that will be returned as a text/plain response.
 */
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() 
    return "Got it!";

首先,您应该使用 Glassfish 控制台 (http://localhost:4848/) 创建一个用户并将其添加到组中。最简单的开始方法是使用文件领域。该过程描述为here。让我们创建一个名为“user”的用户和一个名为“users”的组。

如果您部署应用程序,如果您输入 URL http://localhost:8080/simple-service-webapp/webapi/myresource,则该资源将在您的浏览器中可用。在我们对项目的 xml 文件进行任何配置之前,该资源是免费可用的。

现在让我们将一些元素添加到您的 web.xml 文件中。

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!--Some elements go here-->

<security-constraint>
    <web-resource-collection>
        <web-resource-name>GetIt</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>users</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>file</realm-name>
</login-config>

<security-role>
    <role-name>users</role-name>
</security-role>

我们添加了树元素:

security-constraint 描述了要保护的 URL 模式,列出了允许访问它的角色,对您的问题最重要的是 user-data-constraint 元素,在我们的例子中,它会打开 HTTPS。 login-config 元素指示服务器使用最简单的身份验证机制,这意味着,当您尝试使用浏览器访问资源时,会向您显示一个提示登录和密码的对话框;你的王国的名字也被供奉在这里; 最后一个元素定义了您使用的角色。

现在有必要将组链接到角色。这是使用容器特定的 glassfish-web.xml 完成的。

<glassfish-web-app error-url="">
<security-role-mapping>
    <role-name>users</role-name>
    <group-name>users</group-name>
</security-role-mapping>
<!--some elements go here-->

现在,如果您将浏览器定向到 http:// URL,您将切换到 https://,如果没有带有 &lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt; 的 user-data-constraint 元素,情况就不会如此。

【讨论】:

感谢老兄的详细描述..感谢您的努力..希望我能多次支持您的回答..

以上是关于在本地主机上的 glassfish 4.0 上实现 ssl的主要内容,如果未能解决你的问题,请参考以下文章

尝试在专用服务器上实现 Node.js 和 Socket.io

在本地主机上运行现有 PHP 网站时出现空白屏幕 [重复]

在本地主机上运行 laravel 时出现内部服务器错误

tesseract-php 包装器在本地主机上运行时出现路径错误

如何在我的 Spring 4.0 RestFul Web 服务上实现 Spring Security?

当我在本地主机上运行我的服务器时出现问题(ruby on rails)