Http与Https认证

作者:烨竹

HTTP的认证方式

BASIC 认证(基本认证)
DIGEST 认证(摘要认证)
SSL 客户端认证
FormBase 认证(基于表单认证)

1.基本认证(basic authentication)


--> 普通 GET 请求
<-- 401 响应码拒绝请求,携带响应头 WWW-Authenticate 描述保护区域 和 认证算法
--> 请求携带 Authorization 头,指明认证算法和用户名密码
<-- 200 相应

2.摘要认证


DIGEST认证同样使用质询/响应的方式(challenge / response),但不会像 BASIC 认证那样直接发送明文密码,但是和 HTTPS 的客户端认证相比仍旧很弱

基本认证 和 摘要认证 都是一种无状态的认证方式,就是不需要服务器端保存必要的session,所以也没有session失效期。客户端每次都需要将密码和用户名发送给服务器来完成认证,,而且用户名和密码是保存在浏览器进程的内存中的,也就是只有当浏览器关闭的时候,用户名和密码也随之删除,才表示这次服务和认证结束,下一次请求需要重新输入用户名和密码。
这两种方式都是浏览器产生输入用户名和密码的登录框。Basic认证采用了Base64编码,攻击者很容易获取http请求,然后解码请求就可以获取用户名和密码,没有安全性可言;
而Digest认证采用一中NONCE随机字符串,用户的每次认证都需要哈希和MD5(用户名和密码),并加入这个盐值,客户端和服务器端每次的NONCE都是不一样的,这样就保证了认证的安全性和不可重放性。
这里的NONCE并不是Session保存的一个字符串,这样就违背了无状态性特性

3.SSL 客户端认证

SSL 客户端认证是借由 HTTPS 的客户端证书完成认证的方式。凭借客户端证书(详见 HTTPS加密机制以及数字证书)认证,服务器可确认访问是否来自已登陆的客户端。
SSL 客户端认证步骤:
为达到 SSL 客户端认证的目的,需要事先将客户端证书分发给客户端,且客户端必须安装此证书。

  1. 接收到需要认证资源的请求,服务器会发送 Certificate Request 报文,要求客户端提供客户端证书。
  2. 用户选择将发送的客户端证书后,客户端会把客户端证书信息以 Client Certificate 报文方式发送给服务器。
  3. 服务器验证客户端证书,验证通过后方可领取证书内客户端的公开密钥,然后开始 HTTPS 加密通信。

4.表单认证

基于表单的认证方法并不是在 HTTP 协议中定义的,客户端会向服务器上 Web 应用发送登录信息,按登录信息的验证结果认证。

Https

1.RSA:对极大整数做因数分解的难度决定了RSA算法的可靠性

非对称加密算法
乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
甲方获取乙方的公钥,然后用它对信息加密。
乙方得到加密后的信息,用私钥解密。
公钥可以解密私钥加密的数据私有也可以解密公钥加密的数据

在线测试 公钥/私钥 的 加密/解密
在线生成密钥对
在线 RSA 公钥加密解密
在线 RSA 私钥加密解密

Read More
阮一峰的网络日志 RSA算法原理(一)
阮一峰的网络日志 RSA算法原理(二)

2.SSL握手

生成对话密钥一共需要三个随机数
握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密),无其他作用
服务器公钥放在服务器的数字证书之中

Read More
SSL/TLS协议运行机制的概述
图解SSL/TLS协议

3.证书申请

术语

CA : 电子商务认证授权机构(Certificate Authority)
CSR : 证书签名请求(Certificate Signing Request) 是签发证书时的重要材料,它可以保证私钥安全的情况下通过远端CA签发证书。
CRT : 证书文件(Certificate [sərˈtɪfɪkət] )

制作 CSR 文件

在申请数字证书之前,必须先生成证书私钥证书请求文件(CSR,Cerificate Signing Request),
CSR是您的公钥证书原始文件,包含了您的服务器信息和您的单位信息,需要提交给CA认证中心。
在生成CSR文件时会同时生成私钥文件,需妥善保管和备份

生成CSR文件时,一般需要输入以下信息(中文需要UTF8编码):
Organization Name(O):申请单位名称法定名称,可以是中文或英文
Organization Unit(OU):申请单位的所在部门,可以是中文或英文
Country Code(C):申请单位所属国家,只能是两个字母的国家码,如中国只能是:CN
State or Province(S):申请单位所在省名或州名,可以是中文或英文
Locality(L):申请单位所在城市名,可以是中文或英文
Common Name(CN):申请SSL证书的具体网站域名

使用 OpenSSL 制作

# -new 指定生成一个新的CSR
# -out certificate.csr 输出文件为 当前目录下 ca.kail.xyz.csr
# - newkey rsa:2048 指定私钥类型和长度
# - nodes指定私钥文件不被加密
# -keyout 生成私钥输出文件为 当前目录下 ca.kail.xyz.key
$ openssl req -new -out ca.kail.xyz.csr -newkey rsa:2048 -nodes -keyout ca.kail.xyz.key

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shanghai
Locality Name (eg, city) [Default City]:shanghai
Organization Name (eg, company) [Default Company Ltd]:kail
Organizational Unit Name (eg, section) []:kail-ca
Common Name (eg, your name or your server's hostname) []:ca.kail.xyz
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

显示 csr 文件内容

openssl req -in ca.kail.xyz.csr -text

使用 Java keytool 工具制作

使用 Keytool 工具生成 jks(Java Key Store) 文件
jks 是一个密码保护的文件,存放私钥证书

# -keyalg 指定密钥类型,必须是 RSA
# -alias 指定证书别名,可自定义
# -keysize 指定密钥长度为 2048
# -keystore 指定证书文件保存路径

keytool -genkey -alias ca.kail.xyz -keyalg RSA -keysize 2048 -keystore ./ca.kail.xyz.jks

输入命令后会有下面的交互式操作:

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  ca.kail.xyz
您的组织单位名称是什么?
  [Unknown]:  dev
您的组织名称是什么?
  [Unknown]:  kail
您所在的城市或区域名称是什么?
  [Unknown]:  Shanghai
您所在的省/市/自治区名称是什么?
  [Unknown]:  Shanghai
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=ca.kail.xyz, OU=dev, O=kail, L=Shanghai, ST=Shanghai, C=CN是否正确?
  [否]:  Y

输入 <ca.kail.xyz> 的密钥口令
        (如果和密钥库口令相同, 按回车):

通过 jks 文件生成证书请求

# sigalg指定摘要算法,使用 SHA256withRSA。
# alias指定别名,必须与 keystore 文件中的证书别名一致。
# keystore指定证书文件。
# file指定证书请求文件(CSR)。

keytool -certreq -sigalg SHA256withRSA -alias ca.kail.xyz -keystore ./ca.kail.xyz.jks -file ./ca.kail.xyz.csr

从 jks 文件 获取 私钥

  1. 将 JKS 格式证书转换成 PFX 格式
keytool -importkeystore -srckeystore ./ca.kail.xyz.jks -destkeystore ./ca.kail.xyz.pfx -srcstoretype JKS -deststoretype PKCS12

  1. PFX 文件转成 pem 文件
openssl pkcs12 -in ca.kail.xyz.pfx -nodes -out ca.kail.xyz.pem

  1. pem 文件 中提取出私钥
openssl rsa -in ca.kail.xyz.pem -out ca.kail.xyz.key

主流数字证书都有哪些格式? 介绍了各种格式之间的转换

自制证书

keytool

上面 “从 jks 文件 获取 私钥”中的 第2步,生成的 ca.kail.xyz.pem 文件, 里面包含 私钥和证书信息,编辑删除多余的部分 保留 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 中间的内容,后缀名改为 .csr 即可。
Windows 下 双击打开,可查看证书内容。

OpenSSL

openssl x509 -req -days 365 -in ca.kail.xyz.csr -signkey ca.kail.xyz.key -out ca.kail.xyz.crt

申请授信证书

通过 SSL.md 免费获取
参见 快速获取免费SSL证书
X509 文件扩展名

DER、PEM、CRT和CER这些扩展名经常令人困惑。很多人错误地认为这些扩展名可以互相代替。
尽管的确有时候有些扩展名是可以互换的,但是最好你能确定证书是如何编码的,进而正确地标识它们。正确地标识证书有助于证书的管理。

编码 (也用于扩展名)

.DER 扩展名DER用于二进制DER编码的证书。比较合适的说法是 “我有一个DER编码的证书”,而不是“我有一个DER证书”。
.PEM 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。

常用的扩展名

.CRT 扩展名CRT用于证书证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。
.CER CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。
扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。
.KEY 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。

CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。

来自: http://blog.sina.com.cn/s/blog_a9303fd90101jmtx.html

Read More
如何制作CSR文件?
阿里云证书服务
快速获取免费SSL证书
https://ssl.md
Let's Encrypt,免费好用的 HTTPS 证书
acme.sh 自动更新证书

4.Nginx 配置 HTTPS

证书文件获取:参见 [证书申请]

判断 Nginx 有没有启动 SSL 模块

nginx -V

查看 configure arguments 中 如果有 with-http_ssl_module 则表明开启了 SSL 模块。

安装时 启用 SSL 模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.0g 

make && make install

nginx.conf

nginx/conf 文件夹下新建文件夹 cert , 放入 ca.kail.xyz.crt 证书文件 和 ca.kail.xyz.key 私钥

server {
    listen       443 ssl;
    server_name  ca.kail.xyz;
    ssl_certificate      cert/ca.kail.xyz.crt;
    ssl_certificate_key  cert/ca.kail.xyz.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   html;
        index  index.html index.htm;
        autoindex on; 
    }
}

强制 HTTPS

server {
    listen 80;
    server_name ca.kail.xyz;
    rewrite ^(.*) https://$server_name$1 permanent;
}

Read More
CentOS 7.4 实例配置 Nginx + HTTPS 服务
nginx使用ssl模块配置HTTPS支持
nginx配置ssl加密(单/双向认证、部分https)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342