Web服务Https配置和代码访问方法

简介:

一、Https方式及证书

Web服务使用Https方式需要SSL证书,证书可从两个渠道获取:公开可信认证机构申请或自己生成

公开可信认证机构优势在于校验方便,但是会有租金。

自己生成工具成本低,但用浏览器访问时会提示风险,需要用户手动确认可信。

 

Https还分单向认证双向认证,单向认证只需要服务器端部署1份证书,双向认证要ClientServer端都有证书,而且还会增加ClientServer握手步骤。

 

单向认证已经能够满足传输数据的加密需求,所以登录服务器与客户端通讯采用自己生成SSL证书的Https单向认证方式。

 

证书有以下常用文件格式:JKS(.keystore),微软(.pfx)PEM(.key + .crt)

Web服务器端部署Https时,Tomcat用的是JKS格式,Nginx用的是PEM格式。

 

生成证书时需要输入密码时,注意最好都用同一个。

 

二、生成JKS证书

通过JDK自带的keytool工具生成JKS证书:

 

1.打开命令行窗口,如果是Windows7系统注意要以管理员身份运行。

 

2.进入JDK安装目录下的bin目录,输入命令:

keytool -genkey -v -alias testKey -keyalg RSA -validity 3650 -keystore c:\test.keystore

 

alias: 别名

keyalg: 证书算法,RSA

validity:证书有效时间,10

keystore:证书生成的目标路径和文件名 c:\test.keystore

 

3.输入完上条命令回车会要求输入一些信息,需要记住自己输入的秘钥库口令和秘要口令,最好用同一个,会在Tomcat配置Https时用到。

 

4.最后会在c盘根目录得到生成好的test.keystore

 

 

 

三、生成PEM证书

通过刚才生成的JKS证书转成PEM证书,手工转换步骤较多,所以通过kestore-export工具(百度网盘下载链接)转换。

工具包含的文件:

wKiom1Vry-HAVsYsAAEFMzra9t0748.jpg

运行JKS2PFX转换,命令格式为:

JKS2PFX <KeyStore文件> <KeyStore密码> <Alias别名> <导出文件名> [Java Runtime的目录]

为了简化操作,可以直接运行已经编辑好的go.bat来转换。

go.bat前注意,需要把.keystore放到本目录下,命令最后的[Java Runtime的目录]如果是包含有空格的路径,需要用Windows简化的写法,不能用双引号括起来的(比如c:\Program Files\Java\jdk...)。运行go.bat时还会让输入密码,最好跟前边的密码都统一。完成后,目录里会多出.crt.key.pfx三个文件。

四、Tomcat配置Https

1..keystore格式的证书放到Tomcat服务器上。

 

2.在安装好的Tomcatconf目录下,找到Server.xml文件,找到:

wKiom1Vry-Hj6A3JAADw_eKjsZU775.jpg

 

3.把这个Connector配置解注释,并添加下图红框内参数:

wKioL1VrzXmBfB66AACyHDzXPkA399.jpg 

keystoreFile:指向.keystore证书的路径

keystorePass:生成.keystore时的密码

 

4.重启Tomcat服务,通过https://[Tomcat服务器IP]:8443/可以访问之前的Web服务说明配置成功。8443Tomcat自己的定义的端口,如果改成https默认的443端口,访问时可省去端口参数。

 

5.如果使用的是自己生成的证书,浏览器访问时会提示风险,确认下就可以正常访问。

 

五、Nginx配置Https

1.安装好Nginx后,安装目录下找到nginx.conf配置文件,找到Server段。

 

2.修改监听的端口,有80改为443

 

3.添加SSL参数,填上PEM证书的.key.crt文件所在位置。

 

4.重启Nginx即可生效。

 

server{

        listen 443;

        server_name mxyx.login;

        index index.jsp;

        root /home/www;

 

        ssl     on;

        ssl_certificate /home/test.crt;

        ssl_certificate_key     /home/test.key;

 

        (...)

    }

六、Java通过HttpClient访问Https方法

传入已经创建好的HttpClient实例,返回可访问Https的httpClient。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public  static  HttpClient wrapClient(HttpClient base) {
         try  {
             SSLContext ctx = SSLContext.getInstance( "TLS" );
             X509TrustManager tm =  new  X509TrustManager() {
  
                 public  void  checkClientTrusted(X509Certificate[] xcs, String string)  throws  CertificateException {
                 }
  
                 public  void  checkServerTrusted(X509Certificate[] xcs, String string)  throws  CertificateException {
                 }
  
                 public  X509Certificate[] getAcceptedIssuers() {
                     return  null ;
                 }
             };
             X509HostnameVerifier verifier =  new  X509HostnameVerifier() {
  
                 @Override
                 public  void  verify(String string, SSLSocket ssls)  throws  IOException {
                 }
  
                 @Override
                 public  void  verify(String string, X509Certificate xc)  throws  SSLException {
                 }
  
                 @Override
                 public  void  verify(String string, String[] strings, String[] strings1)  throws  SSLException {
                 }
  
                 @Override
                 public  boolean  verify(String string, SSLSession ssls) {
                     return  true ;
                 }
             };
             ctx.init( null new  TrustManager[] { tm },  null );
             SSLSocketFactory ssf =  new  SSLSocketFactory(ctx);
             ssf.setHostnameVerifier(verifier);
             ClientConnectionManager ccm = base.getConnectionManager();
             SchemeRegistry sr = ccm.getSchemeRegistry();
             sr.register( new  Scheme( "https" , ssf,  443 ));
             return  new  DefaultHttpClient(ccm, base.getParams());
         catch  (Exception ex) {
             ex.printStackTrace();
             return  null ;
         }
     }

 

七、C#访问Https方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string  url= "" ;
WWWForm form= null ;
string  result =  null ;
 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url);
request.Method =  "POST" ;
request.ContentType =  "application/x-www-form-urlencoded" ;
//如果有post数据------
Stream sendStream = request.GetRequestStream ();
byte [] formData = form.data;
sendStream.Write (formData, 0, formData.Length);
sendStream.Close ();
//-------------
ServicePointManager.ServerCertificateValidationCallback =  new  System.Net.Security.RemoteCertificateValidationCallback (CheckValidationResult);
 
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
if  (response.StatusCode == HttpStatusCode.OK) {
using  (StreamReader reader =  new  StreamReader(response.GetResponseStream(), Encoding.UTF8)) {
result = reader.ReadToEnd ();
reader.Close ();
}
}


八、抓包验证

通过tcpdump命令查看指定端口的通讯数据

tcpdump -i eth1 -vv 'port 8080' -nn -X

eth1 外网网卡名称

8080 要监听的端口

本文转自   zl1030   51CTO博客,原文链接:http://blog.51cto.com/zl1030/1657027

相关文章
|
5月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
92 4
|
2月前
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
144 17
使用Web浏览器访问UE应用的最佳实践
|
4月前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
147 5
|
4月前
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
|
5月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
316 0
|
5月前
|
NoSQL Java 数据库连接
springBoot:整合其他框架&condition&切换web配置 (五)
本文档介绍了如何在Spring Boot项目中整合JUnit、Redis和MyBatis等框架,并提供了相应的依赖配置示例。同时,还展示了如何通过条件注解实现Bean的条件创建,以及如何切换Web服务器配置,从默认的Tomcat切换到Jetty。
|
9天前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
52 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
17天前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
5月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
316 3
|
4月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
130 63