配置https访问

2021-11-11  本文已影响0人  焜_8899

0. 说明

使用

另外,由于NetBeans对修改的内容有时响应非常迟钝,当不确定变更是否生效时,可以把它关了重启。
吐槽:之前有一回直到下午它运行的还是上午的代码,中间修改的代码全部没生效,给我整懵了。

1. web.xml

WEB-INF目录下的web.xml文件里的<web-app>标签中添加以下内容

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

其中<url-pattern>的作用是指明需要ssl保护的路径。
<web-resource-name>的作用我还不太明白,网上查到这块填的内容各种各样。

最终web.xml文件里这一块的内容应该大概是这样的。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd">
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>*</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    <servlet>
        <servlet-name>NewServlet</servlet-name>
        <servlet-class>NewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>NewServlet</servlet-name>
        <url-pattern>/NewServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

2. GlassFish

2.1 生成并配置CA证书(无需购买第三方认证证书有也行

参考《GlassFish3 配置https登录》《Glassfish4.1和Tomcat配置Https访问》

  1. 切换到GlassFish的glassfish\domains\domain1\config目录下
    例如我的是D:\GlassFish_Server_5.0\glassfish\domains\domain1\config
  2. 使用以下命令删除系统默认的s1as
keytool -delete -alias s1as -keystore keystore.jks -storepass changeit
  1. 生成新的keystore.jks
keytool -genkeypair -keyalg RSA -keysize 1024 -keystore keystore.jks -validity 18760 -alias s1as

运行这个命令后,需要输入以下一系列数据(以及我填的内容)

输入密钥库口令:
您的名字与姓氏是什么?
  [Unknown]:  localhost
您的组织单位名称是什么?
  [Unknown]:  javaapplication
您的组织名称是什么?
  [Unknown]:  mycompany
您所在的城市或区域名称是什么?
  [Unknown]:  city
您所在的省/市/自治区名称是什么?
  [Unknown]:  province
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=localhost, OU=javaapplication, O=mycompany, L=city, ST=province, C=cn是否正确?
  [否]:  y

输入 <s1as> 的密钥口令
        (如果和密钥库口令相同, 按回车):
再次输入新口令:

  1. 生成需要CA认证的CSR文件
keytool -certreq -alias s1as -file s1as.csr -keystore keystore.jks -storepass changeit
  1. 删除cacerts.jks文件
  2. 生成新的cacerts.jks
keytool -import -v -trustcacerts -alias s1as -file s1as.cer -keystore cacerts.jks -keypass changeit
  1. 重启项目

2.2 处理依赖

参考GitHub(从StackOverflow所给链接而来)和StackOverflow上的内容。

若是出现报错

java.lang.NoClassDefFoundError: Could not initialize class sun.security.ssl.SSLEngineImpl

那么需要对glassfish\modules\endorsed路径下的grizzly-npn-bootstrap.jar文件进行操作。
(我的文件路径是D:\GlassFish_Server_5.0\glassfish\modules\endorsed\grizzly-npn-bootstrap.jar

  1. 用解压软件打开它
    无需解压。
    我用的是WinRAR。


    打开grizzly-npn-bootstrap.jar
  2. 选中并删除sun目录
    需要关闭正在运行中的项目,不然可能有文件被占用,无法删除。
    选中并删除sun目录
  3. 重启项目
上一篇下一篇

猜你喜欢

热点阅读