精华内容
下载资源
问答
  • 如果在宝塔面板中开启网站HTTPS 访问
    千次阅读
    2020-12-19 22:00:39

    发布者:前端集合 // 发布时间:2019-04-08 07:36:00 // 搬*瓦*公 电信直连CN2优质专线512MB 内存,20G SSD,1T 流量,190元每年

    网上有快速直接在宝塔面板里设置https的教程,但是我没有按照这个教程去做,而是自己折腾自己设置。

    直接进入正题,设置步骤如下:

    开启端口443访问

    在【安全】菜单中,【防火墙】中放行443端口。

    证书放置

    证书存放位置 /www/server/nginx/conf/cert/下,不能放在可访问的wwwroot下。

    nginx 规则配置

    在【网站】菜单中,选择你已经创建好的某个具体网站,点击【设置】,选择【配置文件】,填入以下配置:

    特别注意:下面配置文件你需要www.xxx.com改为你自己的域名;

    正式 1_www.xxx.com_bundle.crt 和 2_www.xxx.com.key 请根据你自己的具体情况填写。server {

    listen 80;

    listen 443 ssl;

    server_name www.xxx.com;

    index index.php index.html index.htm default.php default.htm default.html;

    root /www/wwwroot/www.xxx.com;

    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则

    ssl_certificate /www/server/nginx/conf/cert/1_www.xxx.com_bundle.crt;

    ssl_certificate_key /www/server/nginx/conf/cert/2_www.xxx.com.key;

    ssl_session_timeout 5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置

    ssl_prefer_server_ciphers on;

    #SSL-END

    # 强制跳转https

    if ($server_port != 443) {

    rewrite (.*) https://$host$1 permanent;

    }

    #ERROR-PAGE-START 错误页配置,可以注释、删除或修改

    error_page 404 /404.html;

    error_page 502 /502.html;

    #ERROR-PAGE-END

    #PHP-INFO-START PHP引用配置,可以注释或修改

    #SECURITY-START 防盗链配置

    location ~ .*\.(jpg|jpeg|gif|png|js|css)$ {

    expires 30d;

    access_log /dev/null;

    valid_referers none blocked www.xxx.com;

    if ($invalid_referer) {

    return 404;

    }

    }

    #SECURITY-END

    include enable-php-72.conf;

    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效

    include /www/server/panel/vhost/rewrite/www.xxx.com.conf;

    #REWRITE-END

    #禁止访问的文件或目录

    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {

    return 404;

    }

    #一键申请SSL证书验证目录相关设置

    location ~ \.well-known {

    allow all;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

    expires 30d;

    error_log off;

    access_log /dev/null;

    }

    location ~ .*\.(js|css)?$ {

    expires 12h;

    error_log off;

    access_log /dev/null;

    }

    access_log /www/wwwlogs/www.xxx.com.log;

    error_log /www/wwwlogs/www.xxx.com.error.log;

    }

    更多相关内容
  • 网站配置使用https访问

    千次阅读 2020-06-10 16:38:02
    网站配置使用https访问简单了解HTTPS、HTTP、SSL、TLSIIS配置为HTTPS方式访问Tomcat配置为HTTPS访问 简单了解HTTPS、HTTP、SSL、TLS http的连接很简单,是无状态的,无加密,也就是明文,数据都可以看到。 HTTPS...

    简单了解HTTPS、HTTP、SSL、TLS

    • http的连接很简单,是无状态的,无加密,也就是明文,数据都可以看到。

    • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    • SSL是基于HTTP之下TCP之上的一个协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。

    • TLS(传输层安全)是更为安全的升级版 SSL。

    IIS配置为HTTPS方式访问

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    访问https链接的时候可能会出现“不安全的链接”的错误提示,或者会提示“未签名的数字证书”。
    在这里插入图片描述
    不要慌!单击继续访问或者另一种报错下方有个高级选项,继续访问即可。IIS证书默认有效时间是一年哦

    Tomcat配置为HTTPS访问

    首先,网站要能够正常访问,需要配置JDK环境和Tomcat的环境变量,教程很多不多说。
    进入JDK安装目录,以自己的目录为准,可以看到keytool工具,JDK中keytool是一个证书管理工具,可以生成自签名证书(即自己生成的证书,并不是官方生成的证书)。除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书收费哟,在此目录空白位置按住shift键+鼠标右键,在此处打开命令窗口,或者直接运行cmd,输入如下命令:
    在这里插入图片描述

    cd C:\Program Files\Java\jdk-11.0.2\bin
    

    使用keytool生成免费证书,默认有效时间是3个月,可以通过**-validity**设置有效时间:

    keytool -genkey -alias tomcat -keyalg RSA -keystore C:\tomcat.keystore
    

    在这里插入图片描述
    注意:上面***你的名字与姓氏***使用你的域名或者IP,本地既作服务端又作客户端时,可以使用localhost,如果要测试在局域网访问则使用IP,当然有域名就使用域名,外网域名大家都可以访问。通过浏览器访问时就可以用https://192.168.1.111:8443这样的方式去访问。

    查看证书

    keytool -list -v -keystore C:\tomcat.keystore
    

    在这里插入图片描述
    配置tomcat
    修改apache-tomcat-8.5.39\conf目录下的server.xml。
    1、注释掉8080端口配置(可选,不注释的话使用http的8080端口也可以访问)

    2、添加8443端口配置,也可以用443端口(443是https默认端口,通过浏览器访问时可以不写端口),将生成的证书路径和密码配置到

    <Connector 	protocol="org.apache.coyote.http11.Http11NioProtocol"	
                port="8443" maxThreads="200"	
                scheme="https" secure="true" SSLEnabled="true"	                
                keystoreFile="C:\tomcat.keystore" 
                keystorePass="123456"	
                clientAuth="false" sslProtocol="TLS"/>
    

    属性说明

    clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证

    keystoreFile:服务器证书文件路径

    keystorePass:服务器证书密码

    3、浏览器访问,输入https://localhost:8443/
    在这里插入图片描述
    这个时候提示证书错误,因为客户端没有信任服务端证书,步骤参考双向认证的第5、6步,安装证书之后就不会再提示了。

    配置tomcat为双向认证

    上面已经配置了单向认证,接下来配置双向认证。在前述配置的基础上进行配置。先简单介绍下SSL双向认证机制:
    客户端(通常是浏览器)带上自己的客户端证书(私钥,第7步)去请求服务器,服务器由于信任了客户端证书(第4步),那服务器收到客户端的证书,自然就能够解析出来,我认识你。然后就把我的宝贝(服务端证书,即公钥)返回给客户端,客户端又信任了服务端的证书(第6步),我也认识你,既然彼此认识呢。那咱们就可以说点悄悄话了。双向认证完成。其他人都不知道你的私钥和公钥,就算把你的请求都抓下来,也无法解析其中的数据。这就是https的这个"S",安全!

    属性说明

    truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书

    truststorePass:根证书密码

    1、修改server.xml文件,添加上述两个属性,并将clientAuth设置为true

    <Connector 	protocol="org.apache.coyote.http11.Http11NioProtocol"	
                    port="8443" maxThreads="200"	
                    scheme="https" secure="true" SSLEnabled="true"	                
                    keystoreFile="C:\tomcat.keystore" 
                    keystorePass="123456"				
    				truststoreFile="C:\tomcat.keystore"
                    truststorePass="123456" 	
                    clientAuth="true" sslProtocol="TLS"/>
    

    2、服务端证书库已经在前文生成,现在生成客户端证书库

    keytool -genkey -alias client -keypass 123456 -keyalg RSA -storetype PKCS12 -storepass 123456 -keystore C:\client.p12
    

    在这里插入图片描述
    3、导出客户端证书

    keytool -export -alias client -keystore C:\client.p12 -storetype PKCS12 -keypass 123456 -file C:\client.cer
    

    在这里插入图片描述
    4、将生成的客户端证书导入到服务器的证书库,添加为一个信任证书。

    keytool -import -v -file C:\client.cer -keystore C:\tomcat.keystore
    

    在这里插入图片描述
    添加之后再使用命令查看服务器证书库,可以看到两个证书信息。一个是服务器证书,一个是受信任的客户端证书。截图就省略了,太长了。

    keytool -list -v -keystore C:\tomcat.keystore
    

    5、导出服务端证书

    keytool -keystore C:\tomcat.keystore -export -alias tomcat -file C:\server.cer
    

    在这里插入图片描述
    6、将服务端证书导入到客户端浏览器受信任的根证书中。
    Internet选项>>内容>>证书>>受信任的根证书颁发机构>>导入,选择刚刚导出的服务端证书,或者直接双击server.cer安装证书,两种安装证书方式有一丢丢差异,但是最终结果是一样的,相信难不倒聪明的你。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    7、客户端浏览器安装客户端证书库。
    安装之后,客户端浏览器请求的时候就会带上客户端证书(私钥)去访问服务器。
    安装过程跟上面服务器安装过程类似,只不过这次我们需要将客户端证书库安装到"个人"下,需要输入之前设置的客户端证书库密码。
    双击client.p12进行安装
    在这里插入图片描述
    在这里插入图片描述
    也可以直接选择"根据证书类型,自动选择证书存储"。

    双向认证完成,再也没有之前的证书错误提示了,真香!!!还不赶紧打开网页试一试!!!

    浏览器输入https://192.168.1.111:8443,每次浏览器访问都需要手动确认发送客户端证书。
    在这里插入图片描述
    确定之后正常打开网页
    在这里插入图片描述

    强制http跳转到https,首先修改你的apache-tomcat-8.5.39\conf目录下的web.xml
    在最后添加:

    <!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 -->  
        <security-constraint>
            <web-resource-collection>
                <web-resource-name>SSL</web-resource-name>
                <url-pattern>/*</url-pattern><!-- 全站使用SSL -->
            </web-resource-collection>
            <user-data-constraint>
                <description>SSL required</description>
                <!-- CONFIDENTIAL: 要保证服务器和客户端之间传输的数据不能够被修改,且不能被第三方查看到 -->
                <!-- INTEGRAL: 要保证服务器和client之间传输的数据不能够被修改 -->
                <!-- NONE: 指示容器必须能够在任一的连接上提供数据。(即用HTTP或HTTPS,由客户端来决定)-->
                <transport-guarantee>CONFIDENTIAL</transport-guarantee>
            </user-data-constraint>
        </security-constraint>
    

    在这里插入图片描述
    是不是以为到这就万事大吉了?NO!NO!NO!
    还记不记得前面说注释掉8080端口,也可以不注释,那你到底注释了没有呢?如果你注释了,那你有其他的http端口开着吗,是否重定向到8443端口了?没有的话,配置强制访问有什么意义。所以我就是在坑你!!!简单说一句,你设置了强制重定向,那么你就需要在server.xml配置你需要跳转的http端口,并设置redirectPort=“8443”,也就是说将你指定的http端口重定向到你的https端口。比如前面我不注释我的8080端口并重定向到了8443。那么我使用http://192.168.1.111:8080访问时就自动跳转到了https://192.168.1.111:8443。

    tomcat对webservice进行权限验证

    WebService鉴权方式以下几种:
    1、对Web方法添加用户名和密码两个参数,在实现类中进行对其权限验证。

    2、使用SoapHeader,将用户名和密码绑定到SoapHeader,在服务端添加拦截器,对SoapHeader进行拦截,获取其中的用户名密码进行权限验证。
    这两种方式都是对客户端调用方法时的验证,还是能访问wsdl文件,如果要对wsdl文件的访问也加上用户权限验证,添加验证之后,wsdl地址的访问也需要用户明和密码才能访问,有以下两种方法:

    方法一:

    这里注意修改xml文件时使用的工具,用notepad++可以设置编码格式,那么你的中文注释使用UTF-8编码就能够识别,如果使用普通的记事本的话不能更改编码格式,部署tomcat会报错,xml文件解析不出来,虽然成功启动tomcat,但是在启动的时候它明确提示你这是严重的错误,当然你的URL肯定也是访问不了。所以最简单的方式就是在正式环境就别用中文注释了。
    1、修改web.xml,添加如下:

    <security-constraint>
    	 <web-resource-collection>
    	  <http-method>GET</http-method>
    	  <http-method>POST</http-method>
    	  <web-resource-name>tomcat protect page</web-resource-name>
    	  <!-- /soap目录下的所有资源是受保护的 -->
    	  <!-- 我的WebService地址/soap/CommonService?wsdl -->
    	  <!-- url-pattern不能写/CommonService,必须写它的上一级目录,否则无法访问 -->
    	  <url-pattern>/soap/*</url-pattern>
    	 </web-resource-collection>
    	 <auth-constraint>
    	  <!-- 这里的myUserRole要与tomcat-user.xml中配置的role一致 -->
    	  <role-name>myUserRole</role-name>
    	 </auth-constraint>
    </security-constraint>
    <login-config>
    	 <!-- 验证方式,可选的值为: "BASIC", "DIGEST", "FORM", "CLIENT-CERT" -->
    	 <auth-method>BASIC</auth-method>
    	 <!-- 使用的Realm名字,注意这里不能有空格 -->
    	 <!-- 在客户端调用时使用类似setRealm("WEBSERVICELOGIN")函数时会用这个名字 -->
    	 <realm-name>WEBSERVICELOGIN</realm-name>
    </login-config>
    <security-role>
        <description>myUserRole</description>
        <role-name>myUserRole</role-name>
    </security-role>
    

    如果不加最后security-role属性里面的内容,启动tomcat可能会出现警告:

    WARNING [Catalina-utility-2] org.apache.catalina.startup.ContextConfig.validateSecurityRoles Security role name [myUserRole] used in an <auth-constraint> without being defined in a <security-role>
    

    2、修改tomcat-user.xml

    <role rolename="myUserRole"/>
    <user username="myUser" password="myPassword" roles="myUserRole"/>
    

    重启tomcat
    在这里插入图片描述
    客户端在访问时使用setUsername()和setPassword()两个函数传递用户名和密码进行验证,根据自己的客户端的确定调用的方法,基本上都是这两个函数。这个账号密码是在http协议头的authorization属性里面,不在SOAP协议的SoapHeader里面,切勿混淆,解密出来就是用户名和密码:
    在这里插入图片描述

    使用idea选择Java->Web Service Client创建基于axis的客户端调用:

        ((HelloServiceSoapBindingStub) service).setUsername("myUser");
        ((HelloServiceSoapBindingStub) service).setPassword("myPassword");
    

    也可以不创建客户端,动态调用:

        call.setUsername("myUser");
        call.setPassword("myPassword");
    

    方法二:

    本方法基于springboot整合shiro框架,自己对shiro封装一个ShiroConfig配置类,主要代码如下:

    /**
         * Shiro过滤器配置
         */
        @Bean
        public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager)
        {
            ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
            // Shiro的核心安全接口,这个属性是必须的
            shiroFilterFactoryBean.setSecurityManager(securityManager);
            // 身份认证失败,则跳转到登录页面的配置
            shiroFilterFactoryBean.setLoginUrl(loginUrl);
            // 权限认证失败,则跳转到指定页面
            shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
            // Shiro连接约束配置,即过滤链的定义
            LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
            // 对静态资源设置匿名访问,shiro按顺序验证
            filterChainDefinitionMap.put("/excelTemp/**", "anon");
            filterChainDefinitionMap.put("/favicon.ico**", "anon");
            filterChainDefinitionMap.put("/wootion.png**", "anon");
            filterChainDefinitionMap.put("/css/**", "anon");
            filterChainDefinitionMap.put("/docs/**", "anon");
            filterChainDefinitionMap.put("/fonts/**", "anon");
            filterChainDefinitionMap.put("/img/**", "anon");
            filterChainDefinitionMap.put("/ajax/**", "anon");
            filterChainDefinitionMap.put("/js/**", "anon");
            filterChainDefinitionMap.put("/wootion/**", "anon");
            filterChainDefinitionMap.put("/druid/**", "anon");
            filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
    
            //我的WebService
            filterChainDefinitionMap.put("/soap/**", "anon");
            // 退出 logout地址,shiro去清除session
            // 配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了,登出后跳转配置的loginUrl
            filterChainDefinitionMap.put("/logout", "logout");
            // 不需要拦截的访问
            //filterChainDefinitionMap.put("/login", "ssl,anon,captchaValidate");
            filterChainDefinitionMap.put("/login", "anon,captchaValidate");
            // 系统权限列表
            // filterChainDefinitionMap.putAll(SpringUtils.getBean(IMenuService.class).selectPermsAll());
    
            Map<String, Filter> filters = new LinkedHashMap<>();
            filters.put("onlineSession", onlineSessionFilter());
            filters.put("syncOnlineSession", syncOnlineSessionFilter());
            filters.put("captchaValidate", captchaValidateFilter());
            // 注销成功,则跳转到指定页面
            filters.put("logout", logoutFilter());
            //filters.put("ssl",sslFilter());
            shiroFilterFactoryBean.setFilters(filters);
    
            // 所有请求需要认证
            filterChainDefinitionMap.put("/**", "user,onlineSession,syncOnlineSession");
            shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
    
            return shiroFilterFactoryBean;
        }
    

    这里面主要就是下面这句:

       //我的WebService
       filterChainDefinitionMap.put("/soap/**", "anon");
    

    对我的webservice:/soap/的所有url进行拦截,这里使用的是anon匿名访问,也就是无验证,修改成authc就必须要求用户在访问时先在我的登录页面进行登录,否则无法访问。

    使用tomcat时遇到的一些问题总结

    1、要想使用tomcat8w.exe,需要注册服务否则提示指定服务未安装,在tomcat的bin目录运行命令service.bat install即可,注意版本问题,和下面一样,注册服务会绑定系统的java环境,在jdk1.8注册的服务,部署JDK11的项目会报错,修改系统环境变量还不行,还要删除服务重新在新环境下注册,删除服务使用sc delete+服务名。
    2、tomcat出现部署失败,注意检查tomcat版本与JDK版本是否兼容(基础不牢,导致我犯下这个错误),首先是确认本身的运行环境tomcat与java版本的兼容性,其次是检查自己项目所使用的的java版本与当前系统环境变量设置的Java版本(如果自己有多个版本JDK),我有两个JDK版本分别对应两个不同的项目,一个用JDK1.8,一个用JDK11,我在系统环境变量里配置使用的JDK1.8,但是我启动使用JDK11的项目就会导致网页无法访问甚至报错,修改环境变量为JDK11恢复正常,同理,我在JDK11环境下启动使用JDK1.8的项目就会报部署的错,报错类似:

    严重 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
     org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/roadgate]]
    
     严重 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive C:\Users\Administrator\Desktop\apache-tomcat-8.0.53\webapps\roadgate.war
     java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/roadgate]]
    

    tomcat与所支持的Java版本对照表
    在这里插入图片描述

    3、IDEA出现编码问题,网上方法一大堆,也没搞明白,其实根本原因就是你各个源文件的编码不一致,有可能有的文件是你直接复制的别人的,而别人并没有使用你这种编码格式。解决办法最简单的就是把所有格式不一致的源文件使用notepad++(用什么工具修改看你心情,不固定)修改为统一的格式。
    4、缓存警告:

    WARNING [localhost-startStop-1] org.apache.catalina.webresources.Cache.getResource Unable to add the resource at [/WEB-INF/classes/static/excelTemp/20201102/LVSHCAAU6LE048629Ticket.xls] to the cache for web application [/roadgate] because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
    

    tomcat默认允许缓存且大小为10M,用于加载静态资源,如js、css、静态页面等,缓存大小根据自己的需要设置,在 tomcat/conf/context.xml 文件中增加如下内容:

    <Resources cachingAllowed="true" cacheMaxSize="100000" />
    

    本文所涉及源码下载

    项目完整代码(含服务端及客户端)
    客户端代码,方便没有C币的朋友参考:

    package example;
    
    import com.HelloServiceSoapBindingStub;
    import com.HelloService_PortType;
    import com.HelloService_ServiceLocator;
    
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import org.apache.axis.message.SOAPHeaderElement;
    
    import javax.management.remote.rmi.RMIConnection;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    import javax.xml.rpc.ServiceException;
    import javax.xml.soap.SOAPElement;
    import javax.xml.soap.SOAPException;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.rmi.RemoteException;
    
    
    //创建Java项目,勾选Web Service Client,选择Apache axis版本,创建后自动弹窗创建接口相关类及wsdl文件(com包下,包名自己取)
    
    //基于axis框架的WebService客户端,还有基于cxf的
    public class HelloWorldClient {
        public static void main(String[] argv) {
            clientCall();
            dynamicCall();
        }
    
        //使用需要生成wsdl文件,创建客户端(自动生成相关类代码)
        public static void clientCall() {
            try {
                HelloService_ServiceLocator locator = new HelloService_ServiceLocator();
                //RMIConnection service = locator.get();
                HelloService_PortType service = locator.getHelloServiceImplPort();
    
                //如果服务端部署到外部tomcat时对URL进行了拦截,并设置了账号密码,这个账号密码是在http协议请求头的authorization属性里面
                // (在tomcat-user.xml中配置用户名和密码,在web.xml中配置拦截URL),那就必须使用下面两行代码进行验证授权
                // If authorization is required
                ((HelloServiceSoapBindingStub) service).setUsername("myUser");
                ((HelloServiceSoapBindingStub) service).setPassword("myPassword");
    
                //服务端使用了拦截器,使用SOAPHeader进行身份验证
                SOAPHeaderElement header = new SOAPHeaderElement(new QName("timamaes"));
                SOAPElement element = header.addChildElement("username");
                element.addTextNode("admin");
                header.addChildElement("password").addTextNode("123456");
                ((HelloServiceSoapBindingStub) service).setHeader(header);
                //System.out.println(header);
    
                // invoke business method
                String result = service.sayHello("java web service client");
                System.out.println(result);
            } catch (javax.xml.rpc.ServiceException ex) {
                ex.printStackTrace();
            } catch (java.rmi.RemoteException ex) {
                ex.printStackTrace();
            } catch (SOAPException e) {
                e.printStackTrace();
            }
        }
    
        //不需要生成客户端,也不需要wsdl文件,动态调用
        public static void dynamicCall() {
            String url = "http://localhost:8080/myspringbootdemo/soap/api?wsdl";
            //String url = "http://localhost:8080/soap/api?wsdl";
            Service service = new Service();
            try {
                Call call = (Call) service.createCall();
                call.setTargetEndpointAddress(new URL(url));
                // WSDL里面描述的接口名称(要调用的方法)
                //QName中namespaceURI指的是自己WebService服务端设置的命名空间,即服务端@WebService注解的targetNamespace属性
                //Qname中localPart指的是服务端发布的WebService中的方法名
                call.setOperationName(new QName("http://services.myspringbootdemo.example.com",
                        "sayHello"));
                //跨平台调用加上这个
                //call.setUseSOAPAction(true);
                //call.setSOAPActionURI("http://services.myspringbootdemo.example.com/sayHello");
                // 接口方法的参数名, 参数类型,参数模式 IN(输入), OUT(输出) or INOUT(输入输出)
                //这里特别注意,如果服务端没有使用注解@WebParam(name="ParaName")方式为服务端方法的参数设置名字,
                //那么系统会自动使用arg0作为第一个参数名,arg1作为第二个参数名,依次类推。
                //如果使用了该注解,那么参数名就跟注解定义的名字一样。
                // 在wsdl文件中可以看到参数名到底是什么,在调用的时候一定要保证参数名称对应,否则会出现奇怪的错误
                call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
    
                // 设置被调用方法的返回值类型
                call.setReturnType(XMLType.XSD_STRING);
    
                //如果服务端部署到外部tomcat时对URL进行了拦截,并设置了账号密码,这个账号密码是在http协议头的authorization属性里面
                // (在tomcat-user.xml中配置用户名和密码,在web.xml中配置拦截URL),那就必须使用下面两行代码进行验证授权
                call.setUsername("myUser");
                call.setPassword("myPassword");
    
                //服务端使用了拦截器,使用SOAPHeader进行身份验证
                SOAPHeaderElement header = new SOAPHeaderElement(new QName("timamaes"));
                SOAPElement element = header.addChildElement("username");
                element.addTextNode("admin");
                header.addChildElement("password").addTextNode("123456");
                call.addHeader(header);
    
                // 设置方法中参数的值
                Object result = call.invoke(new Object[]{"qinqi"});
    
                System.out.println(result.toString());
            } catch (ServiceException | MalformedURLException | RemoteException | SOAPException e) {
                e.printStackTrace();
            }
    
        }
    }
    

    END!

    展开全文
  • 为什么域名能够访问网站,而直接使用IP不可以

    万次阅读 多人点赞 2018-10-16 11:19:22
    为什么域名能够访问网站,而直接使用IP不可以背景介绍提出问题分析原因只输入ip地址访问不到域名的原因:多个站点对应一个ip地址的问题虚拟主机技术反向代理技术小结 背景介绍 在访问杭电官网杭电官网的时候,直接在...

    背景介绍

    在访问杭电官网杭电官网的时候,直接在浏览器上,输入域名是可以得到访问结果的。因此,产生了一种猜测,既然网络中实际上是根据域名转换的IP来直接访问服务器的,那么我直接通过IP来访问杭电官网是否可以??

    通过nslookup 解析出杭电官网的ip地址,然后在浏览器中手动输入相关ip地址,结果并不能得到访问结果,为什么?

    解析到的ip地址有两个
    218.75.123.182
    218.75.123.181
    初步怀疑可能是用这两个IP地址做了高可用
    当其中某一个Ip地址访问不到的时候,另外一个ip地址可以访问到。

    继而,我决定换个网站来试一下,看能否直接访问杭电OJ高潮来了,惊讶的发现杭电OJ和杭电官网,这两个网站对应的IP地址是同一个。

    提出问题

    由于上面的情况,我内心中充满了疑问,主要有两点。

    • 1.为什么我直接访问www.hdu.edu.cn是能够访问到网站的,而当我输入218.75.123.182却访问不到?
    • 2.为什么www.hdu.edu.cnacm.hdu.edu.cn这两个网站使用dns解析出来的ip地址是一样的?

    分析原因

    查阅众多资料后,基本能够分析出以上两个问题的原因所在。

    只输入ip地址访问不到域名的原因:

    使用nslookup对多个杭电下的网站进行解析,发现很多站点的ip地址是相同的,都是218.75.123.182,218.75.123.181这两个。如下图所示,杭电网站cloud.hdu.edu.cn和www.hdu.edu.cn以及杭电oj系统.www.hdu.edu.cn对应的是同一个公网ip地址(不知道公网ip和私网ip的,可以查一下百度)

    外网查询杭电网站

    这么多站点对应同一个ip地址,你只输入ip地址,浏览器当然不知道你到底要访问哪一个站点,这就是为什么你不能够使用ip地址去访问的原因所在。

    多个站点对应一个ip地址的问题

    理论上来说,一个ip对应一个站点,这是很正常的,那为什么会出现上文中所描述的那样,一个ip地址对应多个站点的情况呢?

    有两种技术可以实现描述的问题

    • 1.虚拟主机技术
    • 2.反向代理技术

    虚拟主机技术

    虚拟主机技术是apache,nginx等服务器所特有的一种功能,也就是实现多个站点在同一台服务器上放置。假如说杭电是使用虚拟主机技术实现的一个IP对应多个web站点的话,那么实际情况应该是这个样子:

    比如我现在有一台服务器,我可以在服务器里面描述这样一种站点和实际路径的关系:

    站点实际存放路径
    acm.hdu.edu.cn/var/www/acm
    www.hdu.edu.cn/var/www/html
    cloud.hdu.edu.cn/var/www/cloud

    那么这样这三个站点就能够在同一台服务器上共存了,当你访问acm.hdu.edu.cn的时候,主要有这么几个步骤

    • 1.dns做域名解析,然后得到解析后的结果,假如说是218.75.123.182。
    • 2.浏览器开始与目标ip地址为218.75.123.182的服务器进行三次握手操作,建立TCP连接
    • 3.浏览器开始构建HTTP请求报文,报文的头部格式为
    Accept	
    */*
    Accept-Encoding	
    gzip, deflate
    Accept-Language	
    zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Connection	
    keep-alive
    Cookie	
    PHPSESSID=v103qj5emvgv5j8hd85d2aro33
    Host	
    acm.hdu.edu.cn
    Referer	
    http://acm.hdu.edu.cn/
    User-Agent	
    Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/62.0
    

    只需要关注这个报文头部的这么一段

    Host	
    acm.hdu.edu.cn
    

    通过这个报文可以知道,浏览器要访问ip地址为218.75.123.182的服务器的哪一台HOST(这里有一个概念,服务器上面可以有一个站点,也可以由多个站点,有一个站点的话,服务器上就只有一个HOST,如果有多个站点的话,服务器上面就会有多个虚拟HOST

    • 4.服务器接受到这个报文之后,会进行分析,apache服务器会根据报文中的host,来匹配自己的配置文件。假设,服务器中的配置文件是这样写的:
    <VirtualHost *:80>
     DocumentRoot /var/www/acm
     ServerName acm.hdu.edu.cn
    </VirtualHost>
    <VirtualHost *:80>
     DocumentRoot /var/www/html
     ServerName www.hdu.edu.cn
    </VirtualHost>
    <VirtualHost *:80>
     DocumentRoot /var/www/cloud
     ServerName cloud.hdu.edu.cn
    </VirtualHost>
    

    那么当请求报文中的HOST是acm.hdu.edu.cn的时候,apache服务器就会根据自己的配置文件所写的那样,去/var/www/acm目录下寻找站点内容。

    • 5.服务器处理请求,构建响应报文,发送响应报文到客户端

    反向代理技术

    当我以为我已经接近了事实真相的时候,意外的发现了另外一个问题,我登录到校园网,然后继续使用nslookup进行域名解析,发现了一个惊讶的事情,解析之后,上文中所提到的那三个站点的ip完全不一样。也就是说实际上这三个站点完全放在了不同的服务器上,即不可能是使用的虚拟主机技术(如果使用虚拟主机技术,这几个站点肯定是在同一台服务器上的)。
    如下图所示
    在这里插入图片描述
    内网、外网解析文中所述三个站点的情况如下表所示

    网站域名外网解析内网解析
    acm.hdu.edu.cn218.75.123.182,218.75.123.181192.168.102.19
    www.hdu.edu.cn218.75.123.182,218.75.123.181192.168.102.6
    cloud.hdu.edu.cn218.75.123.182,218.75.123.18110.1.18.137

    既有192.168开头的私网ip地址,又有10.1开头的私网ip地址,这种特殊的网络结构是由于杭电的网络规划造成的,一开始杭电使用的是192.168开头的私网ip地址,后来发现不够了,继而进行扩展,使用10.1开头的私网ip地址。这里对于这一部分内容不做深究

    由此,我们基本可以推断出,杭电实际的网络结构是下图所示的样子。而不是上文中,我所推测的虚拟主机。
    在这里插入图片描述

    当我在外网访问acm.hdu.edu.cn的时候,主要经历了这么几个步骤。
    通过dns解析获得acm.hdu.edu.cn的反向代理ip地址 218.75.123.181。
    1.客户端发送报文到ip地址为218.75.123.181的服务器上,中间要经过NAT路由器,做NAT转化,把私网IP地址转化为公网IP地址。
    2.数据包在因特网中进行路由准发
    3.数据包最终到达218.75.123.181的apache服务器,这个服务器实际上并不承担web站点任务,主要是作为一个WEB网站的网关角色(反向代理角色)。
    4.请求报文中的HOST是acm.hdu.edu.cn,因此,反向代理服务器会将请求报文转发至域名为acm.hdu.edu.cn的主机上。acm主机处理完请求之后,会将处理后的结果返回至客户端。

    小结

    本文主要讲了两方面:

    • 1.直接使用ip地址访问不了站点的原因

    原因就在于该ip地址可能对应着多个web站点,单单依靠ip地址是不知道如何匹配到哪个web站点的。但是通过域名,我们就能够知道具体要访问哪一个HOST。如果使用虚拟主机,直接找到相关virtual HOST即可,如果使用反向代理,那么通过代理找到HOST的实际私网地址也可以。

    • 2.只有一个公网ip如何实现多个WEB站点的访问

    有两种办法可以实现,其一是虚拟主机,其二就是反向代理。通过目前来看,虚拟主机的实现方式已然不多,更多的企业或者学校使用的是反向代理技术

    针对本案例(杭电若干网站),这若干网站经过DNS解析后对应的是同一个ip218.75.123.182或者218.75.123.181,用户请求接入到这个公网ip的时候,该服务器会进行反向代理,根据请求报文中的HOST名字,将请求报文转发至具体的局域网内部的主机进行处理,然后再将处理结果进行返回。

    展开全文
  • 宝塔nginx安装后,如果使用ip地址进行https访问,会暴露证书,解决方法如下: ... listen 80; ... server_name _;... #直接用ip访问时重定向为444 if ( $host ~* "\d+\.\d+\.\d+\.\d+" ) { return 444; #r

    宝塔nginx安装后,如果使用ip地址进行https访问,会暴露证书,解决方法如下:

    1.在/www/server/panel/vhost/nginx/0.default.conf 中头部修改为如下代码:

        listen 80;
        listen 443 ssl http2;
        server_name _;
        #直接用ip访问时重定向为444
         if ( $host ~* "\d+\.\d+\.\d+\.\d+" ) {
           return 444;
           #rewrite ^(.*) http://www.bojinmi.com;
         }
         #配置默认无效证书
        #HTTP_TO_HTTPS_END
        ssl_certificate    /www/server/panel/vhost/cert/default/fullchain.pem;
        ssl_certificate_key    /www/server/panel/vhost/cert/default/privkey.pem;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        error_page 497  https://$host$request_uri;
    

    其中,证书文件为:
    大家可以使用我们已经生成的这张证书,反正只要域名不是你真实的域名就行了,提供如下

    公共证书

    -----BEGIN CERTIFICATE-----
    MIIDITCCAsagAwIBAgIUTcEWLzynkLCFCoAC1iDH2vG3EkYwCgYIKoZIzj0EAwIw
    gY8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
    YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMTgwNgYDVQQL
    Ey9DbG91ZEZsYXJlIE9yaWdpbiBTU0wgRUNDIENlcnRpZmljYXRlIEF1dGhvcml0
    eTAeFw0xOTAxMTMxNDMxMDBaFw0zNDAxMDkxNDMxMDBaMGIxGTAXBgNVBAoTEENs
    b3VkRmxhcmUsIEluYy4xHTAbBgNVBAsTFENsb3VkRmxhcmUgT3JpZ2luIENBMSYw
    JAYDVQQDEx1DbG91ZEZsYXJlIE9yaWdpbiBDZXJ0aWZpY2F0ZTBZMBMGByqGSM49
    AgEGCCqGSM49AwEHA0IABAg/hZ9lDHj/f+0jDRAN23TkNEqIi46mCGnwZVD3glxL
    l+a1mpfXLHSEFTipnSyQgmvkPYzQGaEIFD0q6W/ZgMujggEqMIIBJjAOBgNVHQ8B
    Af8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMBMAwGA1UdEwEB
    /wQCMAAwHQYDVR0OBBYEFCEZF6Eyem01XPbgwr6DXLZV1qsQMB8GA1UdIwQYMBaA
    FIUwXTsqcNTt1ZJnB/3rObQaDjinMEQGCCsGAQUFBwEBBDgwNjA0BggrBgEFBQcw
    AYYoaHR0cDovL29jc3AuY2xvdWRmbGFyZS5jb20vb3JpZ2luX2VjY19jYTAjBgNV
    HREEHDAaggwqLmRuc3BvZC5jb22CCmRuc3BvZC5jb20wPAYDVR0fBDUwMzAxoC+g
    LYYraHR0cDovL2NybC5jbG91ZGZsYXJlLmNvbS9vcmlnaW5fZWNjX2NhLmNybDAK
    BggqhkjOPQQDAgNJADBGAiEAnrequCk/QZOOrcPH6C3Hgcy4SPNUy5rQtku/aYkj
    qQoCIQCN6IyYNiXuwG+8jUgJrveiirBjiz2jXZSTEfVAyibjTg==
    -----END CERTIFICATE-----
    

    密钥

    -----BEGIN PRIVATE KEY-----
    MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgK0HE3hTJQDg6p/fj
    nS92eSuRKZEZ5F4grT6tWFKNYVmhRANCAAQIP4WfZQx4/3/tIw0QDdt05DRKiIuO
    pghp8GVQ94JcS5fmtZqX1yx0hBU4qZ0skIJr5D2M0BmhCBQ9Kulv2YDL
    -----END PRIVATE KEY-----
    

    经过以上配置,已经基本实现没有绑定的主机名和使用主机ip地址访问时重定向到444页面了!

    下面是一个反向代理的例子:

    #PROXY-START/
    location /
    {
        proxy_pass https://www.lwvip.com/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        
        add_header X-Cache $upstream_cache_status;
        
        #Set Nginx Cache
        
        add_header Cache-Control no-cache;
        expires 12h;
    }
    

    如果使用非80端口访问网站,还需要判断一下非指定主机不允许访问!

    如:

     if ( $host != "www.lwvip.com" ) {
       rewrite ^(.*) http://www.lwvip.com;
     }
    

    以上为个人学习记录,可能不完全正确,有很多东西并不能透彻的理解.如有需要交流学习的可以加QQ群:26503822共同成长

    展开全文
  • Nginx禁止IP直接访问http/https443网站

    千次阅读 2014-07-01 14:03:00
    之前也有段时间接触过Nginx,主要是自己拿来学习研究用,记得当时还写过两篇...今天在详细看Nginx配置的时候,突然想到一个问题:如何在Nginx配置中限定只能用域名访问服务器,而不能IP访问呢? 原先我还以为这在Ngi...
  • 在日常开发中,我们访问的链接接口一般都是http,但是现在为了数据在传输过程中的安全,很多网站或者接口都升级为https,那么我们以前的接口如何在改动不大的情况下也能够支持呢?本篇主要讲解JAVA如何在https下应用...
  • 三.取消https直接http访问

    千次阅读 2018-07-25 10:26:46
    1.WEB-INF/...访问地址分别为: http://login.hacker.org:18080/examples/servlets/servlet/HelloWorldExample http://blog.hacker.org:28080/examples/servlets/servlet/HelloWorldExample ...
  • 目前很多人用宝塔面板搭建https网站,但是如果你使用宝塔面板搭建的网站不止一个,且同时有http和https协议时,会发现http网站会在https下串站的BUG:宝塔创建aaa.com站点使用了https,其它站点(例如bbb.com)使用的...
  • 彻底解决tplink无法访问部分https网站
  • 前段时间做了自己的个人网站,注册了域名,并且域名已经解析到了我租的服务器的公网ip, ...而且大家的网站也都是这样的,通过域名就可以直接访问网站首页, 网上搜索了一些资料后,解决了这个问...
  • 无证书访问https外部接口

    万次阅读 2021-06-22 15:53:44
    楼主公司需要调用gis服务器,但是服务器提供的https请求,同时公司也没有证书,这样会照成访问后不能直接调到接口,需要手动添加证书。所以用一下方式调用https接口可以避免上述情况。 java直接访问https请求,直接...
  • 如果在 https 协议的页面中加载了 http 资源,浏览器将认为这是不安全的,会默认阻止,会带来资源不全的问题。 比如:图片无法显示,样式无法加载,JS 无法加载。如果页面关键资源均为 http 协议,所有的操作、请求...
  • 如何通过域名直接访问你的网站

    万次阅读 2020-03-05 20:56:23
    纯域名访问解决方法: 在服务器的conf目录下找到server.xml 将访问端口改为浏览器默认访问端口
  • 即本地扮演一个缓存服务器的角色,把图片来源方的所有图片缓存到本地,用户访问的时候直接从本地获取,获取不到的时候直接去拿最新的进行缓存,拿不到返回404。 优点: 用户体验更好,因为绝大部分用户的访问速度...
  • 为什么不能直接通过IP访问网站

    万次阅读 2016-06-23 18:36:58
    原文链接: http://www.examw.com/java/jichu/143769/为什么不能直接通过IP访问网站,从理论上说,在IE(或其他的Web浏览器,如Firefox)的地址栏中输入这四个IP地址中的任何一个,都可能访问www.csdn.net.如输入...
  • [nginx] 给http网站访问https

    千次阅读 2018-02-24 17:38:29
    这个时候就可以用https://域名 访问网站了 同时 http://域名 也是可以访问的,因为80端口默认访问http,这个时候如果想要用户访问http时自动跳转到https需要加入如下配置就可以了 再80端口的配置的location /中,...
  • 但实际很多场景基于安全方面的考虑,需要基于HTTPS协议进行访问,这篇文章主要是介绍基于openssl生成自颁发证书实现HTTPS协议访问,进入正文之前,先来复习一下,HTTP和HTTPS的区别吧 1、HTTP全称Hypertext Transfer...
  • 今天这篇文章主要是说一下怎么使用宝塔面板来操作禁止通过 IP 直接访问我们的网站防止被恶意解析,当然独立安装的也是同理。 什么是恶意解析? 恶意解析是指有人通过域名 A 记录直接解析自己 IP 地址,从而得到一...
  • Freepik,是一个国外的设计素材网站,上面的设计资源非常丰富,你可以找到矢量图、位图、Ps和Ai模板。 网站提供的素材有免费与收费之分,对于免费的素材,个人使用或商业使用时,都需要附上指向源素材的链接。而...
  • nginx实现https访问

    千次阅读 2020-07-01 15:16:53
    项目背景是在开发APP发布平台,ios的安装包的下载和自动更新等操作需要https获取plist文件,所以需要通过配置nginx的SSL模块来支持HTTPS访问,也就是说,要做一个网站域名为 域名.com 要求通过HTTPS://域名.com进行...
  • 但是当网站部署上线时,通常会为网站配置域名、并且配置证书支持https://的请求方式。此时如果还用ws://请求,就会请求失败。浏览器的控制台会报错:大概意思就是用https方式请求的网站里面的ws://必须都改为wss://...
  • 宝塔面板开启强制https导致页面无法访问问题描述解决方法寻找答案的过程 今天本来是想把自己写的网页推到服务器上面,但是由于网站部署相关的知识实在太欠缺,花了很多冤枉时间,不过也有一些收获,特地记录一下。 ...
  • 在Windows环境下,CA被分为企业CA和独立CA,他们之间的区别...只有使用https方式才可以正常访问网站。 当然,如果在“SSL设置”中不勾选“要求SSL”,则客户端既可以使用https,也可以使用http方式访问web站点。
  • 另外,CNN的手机客户端可以直接打开访问。 国内的应用市场可能搜索不到这款APP。我们可以从Google Play应用商店下载这款APP。但是,Google Play应用的访问就需要一些技术手段了。 那么,在网上,从哪些地方上找到...
  • 访问方式更改为https的方法

    千次阅读 2018-04-19 10:26:16
    访问方式更改为https的方法 获取证书 安装证书 修改service 修改wab.xml 修改火狐浏览器 一,生成证书文件 所需条件:生成证书的主机需安装JDK,安装tomcat - 打开命令行窗口 点击桌面左下方开始按钮,...
  • 把wordpress改成 https的过程中遇到一个大坑,就是按照某个网页的上说的直接,在后台把website address 直接变成https,这个真是SB了,结果导致网站不能访问了,还好最终把问题修复了。 修复的方法,就是通过修改...
  • 部署ssl证书后,https不能直接访问,很可能是443端口没有放行 https默认端口是443访问的,如果没有放行443端口的话,是不能访问的 以阿里云服务器+宝塔面板举例,需要在阿里云实例的安全组出方向添加443商品放行...
  • Nginx转发https请求访问http后端接口

    千次阅读 2021-05-27 19:37:59
    Nginx转发https请求 问题描述 ...问题原因,因为前端是使用了https,所以经过前端访问后端接口是也要用https协议进行访问。但是Spring Boot项目在没有做多额外的SSL配置或者请求转发的情况下不能直接
  • 在进行移动端网页的开发时,为了及时方便在手机上及时预览本地代码实现的效果,就需要用自己的手机能够直接访问本地开发阶段的网页,所以有了此篇文章,以作备忘。由于我自己电脑上的IIS安装总是有问题,所以我就先...
  • 访问http如何自动转换为https

    千次阅读 2020-04-07 16:51:12
    但是一些网站,比如购物网站由于需要支付,所以需要使用到更加安全的https访问方式。 那么服务器是怎么让浏览器实现自动转换为访问https的呢? 例子 在浏览器输入http://www.taobao.com,并且按F12查看服务器给...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 681,164
精华内容 272,465
关键字:

怎么访问网站直接是https