Web服务Https配置和代码访问方法-阿里云开发者社区

开发者社区> 技术小牛人> 正文

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(nullnew 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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
得到Go程序的汇编代码的方法
有多种方式可以获得Go程序的汇编代码, 尽管输出的格式有些不同,但是都是方便阅读的汇编代码,可以帮助我们更好的了解程序的底层运行方式。 我们看下面一段代码, 它是sync.Once的实现,去掉了不必要的注释,复制出来用来研究的一段小代码: once.
20918 0
ML:模型训练评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)
ML:模型训练评估中常用的两种方法代码实现(留一法一次性切分训练和K折交叉验证训练)
29 0
25个JavaScript数组方法代码示例
摘要: 通过代码掌握数组方法。 原文:通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug经授权转载,版权归原作者所有。 要在给定数组上使用方法,只需要通过[].方法名即可,这些方法都定义在 Array.prototype 对象上。
3419 0
使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名
Nginx 服务绑定域名 1888元 以 YUM 安装的 Nginx 为例: 执行命令 vi /etc/nginx/nginx.conf 编辑 Nginx 的配置文件,将默认的server {..
2051 0
ctfshow-WEB-web12( 利用代码执行漏洞读取敏感文件)
ctf.show WEB模块第12关是一个代码执行漏洞, flag藏在根目录下的一个文件中, 读取文件内容接口过关
7 0
phpstudy集成下Apache配置SSL证书实现https加密访问
phpstudy集成下Apache配置SSL证书实现https加密访问
9 0
百度分享工具代码利于SEO的配置方法
社会化流量对于百度搜索引擎SEO的影响,有百度公开的说明,社会化分享的流行度会影响百度索引文章的速度。那么百度分享工具代码如何配置合理?它是如何影响SEO的呢?武汉网络推广为大家详细解答。 一、什么是百度分享代码百度分享官网:http://share.baidu.com/,注册之后能获取百度统计代码。
897 0
通过90行代码学会HTML5 WebSQL的4种基本操作
通过90行代码学会HTML5 WebSQL的4种基本操作
11 0
5723
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载