shell实现https登录
- 服务端提供了两个api:
一个是用于用户认证,因为要传输密钥,所以用了https方式 如何在服务端配置https请见另外一个博文
https://192.168.1.190:8443/api/auth 参数api_key=***&secret_key=*** [post 方式提交]
另外一个api,普通的http api,只有当通过第一个api的认证后,服务器下发一个cookie,之后的请求带上cookie,才能访问到内部页面,当然cookie对应的session定期失效。
http://192.168.1.190:8081/api/inner [get 方式提交]
- 下面是客户端(shell)部分:
[root@centos shell]# curl -v --insecure -d "api_key=test&secret_key=test" https://192.168.1.190:8443/api/auth
* About to connect() to 192.168.1.190 port (#0)
* Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port (#0)
* Initializing NSS with certpath: /etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* skipping SSL peer certificate verification
* SSL connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA
* Server certificate:
* subject: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
* start date: 10月 :: GMT
* expire date: 1月 :: GMT
* common name: free4lab
* issuer: CN=free4lab,OU=free4lab,O=free4lab,L=beijing,ST=beijing,C=CN
> POST /api/auth HTTP/1.1
> User-Agent: curl/7.19. (i686-pc-linux-gnu) libcurl/7.19. NSS/3.12.7.0 zlib/1.2. libidn/1.18 libssh2/1.2.
> Host: 192.168.1.190:
> Accept: */*
> Content-Length:
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 OK
< Server: Apache-Coyote/1.1
< Set-Cookie: JSESSIONID=84AB6E3414D8E639959745CBA5DA448F; Path=/; Secure
< Set-Cookie: login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8; Expires=Sat, -Nov- :: GMT
< Content-Type: text/html;charset=UTF-
< Content-Length:
< Date: Sat, Oct :: GMT
<
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #
{"message":"Login succeeded!","status":0,"value":""}
可以看见,我提供正确的api_key和secret_key后,服务端发回两个cookie并且返回json,提示认证成功。
其中: JSESSIONID是用来定位服务端的session的,简单的说,客户端发送http请求时,只有在cookie里带上了正确的JSESSIONNID,java后端 HttpSession session = request.getSession(); 这样的语句才能获取到与之对应的session信息。
所以之后的请求我就都带上以上两个cookie信息即可!
[root@centos shell]# curl -v --cookie "login_cookie=c7be27c2-fe79-4772-ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F" http://192.168.1.190:8081/api/inner
* About to connect() to 192.168.1.190 port (#0)
* Trying 192.168.1.190... connected
* Connected to 192.168.1.190 (192.168.1.190) port (#0)
> GET /api/inner HTTP/1.1
> User-Agent: curl/7.19. (i686-pc-linux-gnu) libcurl/7.19. NSS/3.12.7.0 zlib/1.2. libidn/1.18 libssh2/1.2.
> Host: 192.168.1.190:
> Accept: */*
> Cookie: login_cookie=c7be27c2-fe79--ae2b-dae485da47d8;JSESSIONID=84AB6E3414D8E639959745CBA5DA448F
>
< HTTP/1.1 OK
< Server: Apache-Coyote/1.1
< Content-Length:
< Date: Sat, Oct :: GMT
<
* Connection #0 to host 192.168.1.190 left intact
* Closing connection #
{"message":"authentication succeeded!","status":0,"value":"welcome to home page"}
这样,我们就用shell脚本实现了https的登录!
- 用浏览器登录就很简单了,随便写一个html的post代码
<form action="https://localhost:8443/api/auth" method="post">
<p>First name: <input type="text" name="api_key" /></p>
<p>Last name: <input type="text" name="secret_key" /></p>
<input type="submit" value="Submit" />
</form>
然后输入api_key和secret_key就认证完成了



shell实现https登录的更多相关文章
- Linux登录shell和非登录(交互式shell)环境变量配置
使用Jenkins执行shell脚本的时候, 碰到command not found. 比如java mvn, 这些环境变量配置在/etc/profile 中, 但jenkins执行的时候并没有加载. ...
- Qt之HTTPS登录
简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...
- 交互式shell和非交互式shell、登录shell和非登录shell的区别
交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...
- Qt之HTTPS登录(集成QNetworkAccessManager提前修改QSslConfiguration,然后post)
简述 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP ...
- (HTTPS)-tomcat 实现 https 登录,去掉端口号
最近项目组要给日本客户做个产品,升级服务器交由我来升级.为了测试用,想要在自己电脑上搭个服务器. 服务器需要由https登录,并且不显示端口号. 费了些劲儿,看了n多帖子,好不容易弄好了.趁在没忘记之 ...
- GS使用HTTPS登录的设置过程
1. Windows 增加角色服务 服务器配置管理器, 添加角色服务 增加角色功能里面有: 证书颁发机构 证书颁发机构 web注册 2. AD CS配置 主要是next操作 独立ca 根证书 等 3. ...
- Shell学习——Shell分类:登录shell和非登陆shell 交互shell和非交互shell
1.从两个不同维度来划分,是否交互式,是否登录 2.交互式shell和非交互式shell 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shel ...
- 登录shell与非登录shell读取文件过程
登录shell与非登录shell读取文件过程登录:/etc/profile→/etc/profile.d/*.sh ~/.bash_profile非登录:~/.bash_profile→ ...
- silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录
在上篇基本说清了本项目的基本框架,下面开始说下项目的加载和shell.开始之前在建立EF时出现了一个问题,我在数据库中建立了视图,而在EF导入视图时出现因无法匹配主键导致无法导入视图的问题,检查发现是 ...
随机推荐
- LeetCode : 93. Restore IP Addresses
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABZ4AAAHUCAYAAAC6Zj2HAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVlw
- NYOJ题目10505C?5S?
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJ/CAIAAAAbDelhAAAgAElEQVR4nO3dPXLbOhfG8XcT7r0Q11
- Android Tab -- 使用ViewPager、PagerAdapter来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换,自动切换. 代码:https://github.com/ldb ...
- Jquery学习笔记--性能优化建议
一.选择器性能优化建议 1. 总是从#id选择器来继承 这是jQuery选择器的一条黄金法则.jQuery选择一个元素最快的方法就是用ID来选择了. 1 $('#content').hide(); 或 ...
- 理解理解python中的'*','*args','**','**kwargs'
http://blog.csdn.net/callinglove/article/details/45483097 讲了一大堆, 我也是用来理解类继承当中的参数行为的. =============== ...
- 没有VisualStudio也要HelloWorld
前言 在博客园看到Artech的通过3个Hello World应用来了解ASP.NET 5应用是如何运行的(1)这篇文章,于是想跟着教程学习一下.说来惭愧,这篇文章发布于2014年12月,我在2016 ...
- Object.create 函数 (JavaScript)
创建一个具有指定原型且可选择性地包含指定属性的对象. 语法 Object.create(prototype, descriptors) 参数 prototype 必需. 要用作原型的对象. 可以为 ...
- c++ 子类调用父类构造方法 调用父类方法 类声明与实现分离
Person.h #pragma once #include "stdafx.h" #include<iostream> class Person { private: ...
- Metrics介绍
Metrics可以为你的代码的运行提供无与伦比的洞察力.作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, 比如Jetty, Logback, Log4j, Apac ...
- 使用PHPExcel导入Excel到MySql
.连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连 ...