美文网首页
配置https访问

配置https访问

作者: 焜_8899 | 来源:发表于2021-11-11 02:02 被阅读0次

    0. 说明

    使用

    • NetBeans 12.4
    • GlassFish Server 5.0
    • Java EE 8

    另外,由于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. 重启项目

    相关文章

      网友评论

          本文标题:配置https访问

          本文链接:https://www.haomeiwen.com/subject/byxwzltx.html