windows10安装kali子系统&&https: aptMethod::Configuration: could not load seccomp policy: Invalid argument解决办法 Linux

windwos10安装kali Linux子系统,后更新系统若是出现如下错误:

https: aptMethod::Configuration: could not load seccomp policy: Invalid argument

一般是你的源有问题,可以尝试修改你的源,我就是通过修改源治好了这个毛病!(注:以下命令都是在root权限下执行得,你可以通过sudo su 来切换到root权限下)

nano /etc/apt/sources.list 

修改成如下(仅供参考,可以自己测试可用的速度快的,反正国内得总是出错-_-|):

#deb http://http.kali.org/kali kali-rolling main
deb http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling main

然后执行一下命令更新即可:

apt-get update && apt-get dist-upgrade && apt-get install wget -y 

然后可以安装apt install apt-transport-https,然后尝试使用官方源(deb https://http.kali.org/kali kali-rolling main)更新。

执行完上面的步骤后,你可以通过执行 wget 命令,如果返回类似下面得信息,则表示你的wget安装好了!

root@mrxn:/# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Try `wget --help' for more options.

 我这边可以跑到560KB/s左右,如果觉得慢,可以开VPN/代理加速。


出现意思错误是因为我想wget一个东西的时候,提示我命令未找到,然后就安装wget,失败,到切换源,成功安装wget,成功wget我需需要下载得东西,然后呢。。。就有了这篇日经贴!

大致简记一下如何再windows10上安装kali Linux子系统:

参照官方文档:https://docs.microsoft.com/en-us/windows/wsl/install-win10

win+Q 搜索powershell,然后以管理员的方式 打开,执行如下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

官方文档说,执行命令后,根据提示执行重启。但是我的提示是RESTARTNEEED:FALSE 。powershell.png

so,我不需要重启!@_@||记不太清,有可能我之前开启了Linux子系统,wangle !。。。

插一句:开启Linux子系统,在 控制面板—程序和功能—启用或关闭Windows功能—把Linux子系统复选框勾上即可

control.png

linuxs.png

接下来就是去应用商店搜索kali 即可找打,然后安装吧!一百多兆,很快的。接下来就是上面得解决错误。。。


接下来就是安装xfce4,

wget https://raw.githubusercontent.com/Mr-xn/server-bash-script/master/xfce-xrdp.sh

sh xfce-xrdp.sh 

差不多三十几分钟左右就好了(渣渣本,配置好点会更快)。

 01.png02.png03.png

然后用命令 service xrdp start 来启动xrdp,在本地使用远程桌面连接127.0.0.1:3390 即可打开GUI界面了。

start.png

 local.png

用户名和密码就是安装kali时设置的账号密码。

login.png

进去后选择 Use default config 加载默认配置即可。

desktop-default-config.png

然后进入桌面:很简洁

desktop.png

使用 uname -a 可以看到是老版本得kali 并不是最新版得。

last.png

当不需要的时候,可以使用 service xrdp stop 停止XRDP进程即可

stop.png

总结:windows下得Linux子系统,可以用,但是不是很好用。但是对硬件要求比较高,显卡或者内存不高或导致运行很慢。。。当然了,这个年代,SSD必备!

参考文章链接:

https://github.com/meefik/linuxdeploy/issues/869

https://whitedome.com.au/re4son/voodoo-kali/

https://www.rootlinks.net/2018/03/10/windows-10-wsl%E3%81%AEkali-linux%E3%81%AB%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%92%B0%E5%A2%83%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/

https://docs.microsoft.com/en-us/windows/wsl/install-win10

标签: Kali windows10

admin 发布于  2018-3-19 15:50 

好消息:沃通免费SSL证书升级为2年期5个域名-想要使用https的,赶紧行动啦 业界新闻

好消息:沃通免费SSL证书由原来支持1年期1个域名,升级为支持2年期5个域名!用户可以一次性申请2年期SSL证书绑定5个域名,已经能够满足站点的基本使用需求。2年期5个域名的免费SSL证书将于今天正式开放申请,欢迎新老用户登录沃通免费SSL证书申请页面立即体验!


沃通CA自2015年初推出免费SSL证书后,获得广大用户的一致好评,让广大中小网站和个人网站都能零成本启用HTTPS加密,保护网站机密信息安全。目前,沃通免费SSL证书的用户已经遍布180多个国家和地区,为全球普及HTTPS加密起到了极大的推动作用。此外,沃通推出的SSL精灵大大降低了SSL证书安装部署的复杂性,让用户能够一键搞定HTTPS加密。


DV免费ssl证书申请指南

一、注册、登录


1、打开浏览器,访问http://freessl.wosign.com,选择需要的证书类型

1.1免费多域申请地址:http://freessl.wosign.com/freessl

2、进入buy系统后,首先登录buy系统(点击左上角的登录)


3、如果您已经有账号密码或客户端证书,请选择登录方式并登录;如果没有,请先注册

其中,密码为登录申请平台的密码,可以是您的邮箱密码,也可以重新设置,并记住!

4、进入您的邮箱,激活邮件,等待取回您的证书,双击pfx证书安装,然后登录申请平台。(邮件收到的pfx证书为登录buy系统的客户端证书,请不要弄混)

二、申请证书


1、登录buy系统,进入用户中心,选择证书,添加您需要的证书,如下图(或登录后访问

DV SSL申请地址 https://buy.wosign.com/DVSSL.html

免费SSL申请地址 https://buy.wosign.com/free/FreeSSL.html)

在购物车中确定好年限及域名数量后(以DV多域为例),确定下单,并补充材料


2、接着您需要填写证书绑定的域名,证书签名算法,证书安装密码,中英文证书等信息。


3、接下来就是申请免费SSL证书重要的域名验证,wosign提供了两种方式,您可以选择whois邮箱验证,或者网站验证方式,如下图所示,也可以先跳过验证,进入下一步,等确认订单时再验证域名。02.png

PS:wosign有严格的域名验证,您必须通过上面其中一种方式验证域名的所有权,验证通过后,wosign才会颁发您的证书。01.png

4、选择证书申请文件生成方式,推荐您选择方式一,简单省事,如下图所示,然后确认订单信息。

PS:如果是自己生成的CSR,请选择方式二并将CSR提交到下方。

5、订单确认后,稍等一会,证书就会通过申请邮箱发送给您啦,通过邮箱就可以领取!


、取回您的证书并一定要保管好证书和密码! 

7、证书安装部署指南,请访问:http://freessl.wosign.com/guide

更多详细教程请前往官网查看:http://freessl.wosign.com/


相关文章:

emlog 使用ssl证书开启HTTPS安全访问三步曲


一段代码让nginx实现网站资源防盗链

nginx配置location总结及rewrite规则写法

nginx配置ssl加密(单双向认证、部分https)

NginxRewrite规则判断普通用户与搜索引擎爬虫(UA)实现https跳转

SSL/TLS原理详解

OpenSSL 与 SSL 数字证书概念贴

基于OpenSSL自建CA和颁发SSL证书


admin 发布于  2015-12-27 16:48 

免费在线生成二维码API接口可以使用了,支持http和https PHP

本站在线二维码API接口 支持https和http 、支持 get 和 post 请求方式、
欢迎大家使用:普通http网站调用样例:http://api.mrxn.net/mrxnqrapi/api.php?data= + 文字/网址等内容 其实http的两个都可以使用的
需要使用https网站可以参看下面的调用方法:001.png
https://mrxn.net/mrxnqrapi/api.php?size=4x4&data=mrxn.net 生成的二维码如下:
手机扫描浏览、分享
Mrxn二维码API参数说明
data:要转码的数据
level:默认L 纠错级别:L、M、Q、H
size:默认4 点的大小:1到10,用于手机端4就可以了
margin:默认1 边距 1到10
logo:默认为空 需要使用logo的请单独找我详谈!
作者:Mrxn Blog: https://mrxn.net Email:[email protected]

当然也有在线制作你喜欢样式的二维码:免费体验一下

制作初衷因为本站是https的,非https加密也是可以使用的,但是浏览器的绿色小锁就会显示感叹号,我这人有强迫症!而且但免费的网站很多的都不支持https,或者是很慢,果断觉得自己搞,问了@独狼一些,还有@php爱好者,最终自己搞定了。

下面给大家列出几个大家常用的国内外的免费在线生成二维码 API 的链接:

支持http的:

http://b.bshare.cn/barCode?site=weixin&url=https://mrxn.net
http://s.jiathis.com/qrcode.php?url=https://mrxn.net

http://qr.liantu.com/api.php?text=mrxn.net

http://api.k780.com:88/?app=qr.get&data=mrxn.net&level=L&size=6

最新发现的百度云盘的:http://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net

支持https的:

国外的:https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=mrxn.net

我自己的:https://mrxn.net/mrxnqrapi/api.php?data=mrxn.net

明月浩空的:https://limh.me/api/qrapibig.php?url=mrxn.net.jpg 他这个必须加括号里面的后缀才行(.jpg)

最新发现的百度云盘的:https://pan.baidu.com/share/qrcode?w=150&h=150&url=mrxn.net (不过加载了非加密的资源,强迫症就别用了!)

更多的二维码分享可以参看我这篇文章:https://mrxn.net/free/261.html 

分享4个自动生成网址二维码图片的方法



admin 发布于  2015-12-13 19:41 

Apache下设置自动将http跳转到https方法 技术文章

今天有朋友问我怎么配置虚拟机,使其支持访问者打开首页时自动跳转到https,而非http,因为是虚拟机,重复-虚拟机,所以呢,配置服务器的那些方法不好使,搜索得到如下方法,利用修改 伪静态规则 文件- .htaccess ,使虚拟机也可以支持直接打开网站跳转到https,具体方法如下,在htaccess文件末尾添加如下代码即可实现:


RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]


000106-2015-12-02.jpg

一行一条命令,其实就是利用伪静态将访问者跳转到443端口,从而实现了http到https的跳转。

注:此为虚拟机的方法,推荐使用服务器自己配置https,虚拟机的这样配置后,有可能导致蜘蛛不能抓取你的网站,对SEO不好,慎重选择!

操作前记得备份相关文件,以及数据!

服务器配置https方面可以参考如下文章:


emlog 使用ssl证书开启HTTPS安全访问三步曲

nginx配置ssl加密(单双向认证、部分https)

NginxRewrite规则判断普通用户与搜索引擎爬虫(UA)实现https跳

SSL证书与Https应用部署小结



admin 发布于  2015-12-2 18:53 

emlog侧边栏日历显示正在加载中解决方法(包括https和http) emlog

这几天在论坛看到王老师 @王语双  发帖说,他的emlog内页日历显示不出来,一直显示 --加载中(包括https和http),却一直显示不出来,如图:

000090-2015-11-06.jpg

王老师的是http网站,我的是https的,也是加载不出来,在论坛看到的答复中知道大概是这三点的原因造成的:


  1. js冲突;
  2. 网络问题;
  3. 301跳转问题; 

王老师的情况最后发现是属于网络问题,即有时候网络高峰期的时候,移动网络有可能出现这种情况;

js冲突一般在浏览器的开发者工具条里面可以看出来,这里不做讨论;

网络问题嘛,没法解决,自己换服务商吧!

301跳转问题:

没做好301跳转的,比如没有做mrxn.net 301跳转到 www.mrxn.ne t的时候,访问mrxn.net 就有可能出现这种情况,一般在开发者工具条里面有提示:


XMLHttpRequest cannot load http://www.wys.me/?action=cal&randnum=0.19238296267576516. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://wys.me' is therefore not allowed access.


我的站点属于https加密的类型,所以提示的就是如下信息:


Mixed Content: The page at 'https://mrxn.net/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'https://mrxn.net/?action=cal&randnum=0.8051533969119191'. This request has been blocked; the content must be served over HTTPS.
大概意思就说,这个页面使用的是https加载https://mrxn.net,但是请求里面混杂非加密的请求


https://mrxn.net?action=cal&randnum=0.8051533969119191,因此这个请求被服务器阻断了,因为服务器要求请求必须是https加密的。

000091-2015-11-06.jpg

我在论坛里面回帖说了一下我的https也不加载,得到了基友hackhp @hackhp 的如下答复:

修改/include/lib/function.base.php里面的

return 'http://' . $_SERVER['HTTP_HOST'] . $matches[0];


修改为:

return '//' . $_SERVER['HTTP_HOST'] . $matches[0];
我做了测试,的确修改后就可以加载了

000092-2015-11-06.jpg

函数的注释显示是

/**
 * 获取站点地址(仅限根目录脚本使用,目前仅用于首页ajax请求)
 */

也就是说这个函数是用于ajax请求获取网站地址的,那么,修改成如下形式也是可以的:

return 'https://' . $_SERVER['HTTP_HOST'] . $matches[0];
结果证明是可行的。

emlog侧边栏日历显示正在加载中解决方法(包括https和http)这个小问题在此小计就结束了,在此记录分享可能需要的朋友,希望可以帮到你们。


admin 发布于  2015-11-6 16:48 

巧用七牛CDN的镜像功能使百度分享支持HTTPS 技术文章

最近搞了个 HTTPS 证书,像以前一样给博客添加了个百度分享(http://share.baidu.com/)的组件,但发现百度分享不支持 HTTPS(百度分享图标出不来,console 会提示页面有不安全的脚本元素)。看了其它几家也都不支持,搜索了下发现有人建议把百度分享所需的 js 都保存到自己本地就行了。这也是个办法,分享功能大多是抓取这个页面的 title、摘要、图片等然后起调一个页面完成分享,这些都是本地 js 文件能完成的。

看了下从百度分享获取的代码,里面主要加载了这个:http://bdimg.share.baidu.com/static/api/js/share.js,访问了一下果然还是不支持 HTTPS。然后我就天真的把 share.js 上传到了七牛 CDN(七牛是支持 HTTPS的,在空间设置-域名配置里面设置下就行),然而百度分享的图标还是没出来。看了下控制台,卧槽,又加载了一堆 js,作为一个全栈工程师,我非常灵性的瞅了眼代码里面有一段:domain:{staticUrl:”http://bdimg.share.baidu.com/”},原来是模块化加载,把链接替换成七牛 CDN  的链接后有些请求 404 了,我又天真的以为把这几个 js 文件补全就行,但是补完几个,又有几个文件 404 了,我可没耐心一个个文件补齐呀。

作为一个灵性码农,我马上想到七牛不是有个镜像存储功能嘛,设置一发:

20150817003746

故事就这么结束了吗?怎么可能。百度“幺蛾子”还是比较多。百度分享不光是分享功能,还有分享的数据分析。数据哪里来呢?前端埋点统计的呀,原理简单说就是监控分享时的点击事件,发送数据到后台。这其中的核心就是 http://nsclick.baidu.com/v.gif,需要统计的参数和值都以 GET 参数的形式附在链接后面。然后后端再清洗请求日志或者获取请求的时候就直接把数据入库了。但这个统计小图片也不支持 HTTPS。没办法,只能去掉了,方法也很简单,static/api/js/trans/logger.js 文件为空就行(上传个空文件、占个位)。到此才算大功告成。

上面是授之以渔,不想自己弄的,可以直接抓鱼,当然希望你也能明白其中的风险,文件是我这边的(可能有后门,当然我没有),而且哪天我流量没了可能会把文件删了。

<div class="bdsharebuttonbox"><a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a><a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a><a href="#" class="bds_sqq" data-cmd="sqq" title="分享到QQ好友"></a><a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a><a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"></a></div>
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='https://dn-iyz-file.qbox.me/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>

一点后话:一直感觉百度分享没人维护了,在群里打听了下。应该是有人(部门)维护着(至于不支持 HTTPS 那是百度 CDN 的锅),但是现在不流行打社交牌了,公司也不重视这块了,还是 200 亿糯米 O2O 更实在,而且百度首页貌似也不显示搜索结果页面的分享次数了。

当然 ,emlog可以使用简爱的这个分享插件:http://www.emlog.net/plugin/174,也支持https,但是得需要jquery的支持,如果模板没有加载,需要自己添加,不然是不会起作用的。

原文地址:https://iyaozhen.com/use-qiniu-image-storage-allow-baidu-share-support-https.html


admin 发布于  2015-10-14 10:05 

SSL证书与Https应用部署小结 技术文章

为了提高网站的安全性,一般会在比较敏感的部分页面采用https传输,比如注册、登录、控制台等。像Gmail、网银等全部采用https传输。

https/ssl 主要起到两个作用:网站认证、内容加密传输和数据一致性。经CA签发的证书才起到认证可信的作用,所有有效证书均可以起到加密传输的作用。


浏览器与SSL证书
SSL应用部署小结 - hanguokai - 韩国恺的博客
上图是IE和Chrome上对https的不同表现。

SSL最主要应用是在浏览器和Web服务器之间,尽管不限于此。当然,安全本身是重要的内在属性。但在表面上看,部署SSL 就是为了让用户浏览器里看起来更安全一些,以增加用户的信任感。所以很多企业更把它当作门面,而签发机构也为此卖高价,尤其是国内的价格明显高于国外的。

实际上SSL证书也可以做客户端认证,用户拥有自己特有的证书,用它可以证明自己的身份,当然也就用不着用户名和密码了。但这种用的很少,一般web服务器也不支持。

内容加密传输更安全,如果只是为了加密,使用自签发的证书也可以,但浏览器无法验证证书,所以会给出一个非常吓人的警告,所以自签发证书不适合给外人使用,只适合内部使用,把这个证书 加入到自己的信任列表或忽略证书验证即可,以后就不会继续拦截了。

证书需要被少数一级或二级 CA 认证才有效。计算机安全中的信任就是一个信任链的关系,信任链最顶端的被称为根证书。
自签发的证书在技术上是完全一样的,仅用于加密传输是没问题的。但是不能被外人信任,所以一般仅用于内部使用。除了自签发不被信任,如果证书过期、已被吊销或者非证书所代表的域名也都是不被信任的,导致证书验证出错。

用于网站的证书需要被大众信任,所以不能自签发的证书,那就申请(购买)一个吧。


申请证书

1.证书类别
按证书包含域名数量分为:
  • 单域名:只针对这个域名有效,不能用在其它域名下。
  • 多域名:只针对列出的多个域名有效。
  • 通配符域名(wildcard):对任意子域名有小,显示的是 *.example.com。
注意:SSL所说的单个域名是一个完整的域名,一个子域名就算一个,而非一个顶级域名。
如果网站有很多子域名,只需要申请真正需要的域名证书。

按验证的类别分:
  • 域名认证(Domain Validation):认证你的域名所有权和网站,申请验证简单,几分钟即可。
  • 组织机构认证(Organization Validation):认证的域名和公司信息,需要提交公司资料认证。
  • 扩展认证(Extended Validation,简称EV):这种证书会在浏览器中出现“很明显”的绿色地址栏,给用户的可信度最高。有安全评估保证。
个人或小站点可用一类或二类,企业一般用二类认证,少数企业会用到EV认证。

2. 证书价格
看了看网上SSL证书的价格,便宜的一般都是10美元左右一个子域名/每年,按不同类别、不同品牌等价格在几十美元到几百美元一年。比如能显示绿色地址栏的EV证书和通配符证书贵一些。国内自己的或代理的,比国外贵不少,动辄几千元。其实就是由可信源认证了一下,类似于办证,用起来没什么差别,并非越贵越好。

3. 签发机构(“卖家”)

SSL应用部署小结 - hanguokai - 韩国恺的博客
国外常见的SSL提供商有:Thawte,Go Daddy,VeriSign,RapidSSL,GeoTrust(QuickSSL),StartSSL,Comodo。
StartSSL、Go Daddy的比较便宜,GeoTrust、Comodo的价格适中,Thawte和VeriSign的价格较贵。

VeriSign现在归属赛门铁克,在国内是由天威诚信代理的。世界真小,天威诚信就在我很多年以前的东家(启明星辰)大楼里,地下一层是他们的机房,我还进去过一次。

4. 免费的StartSSL
唯一免费的是StartSSL,其它的一般只提供30免费试用。

但 StartSSL 提供的免费证书是一类的、仅对域名和email进行验证,不对组织做验证(也就是面向自然人的,非面向组织机构的),不过
仅作为域名验证和数据加密也够了,并且浏览器也认它,一般人也不会去看你的证书级别。适合个人和初创网站使用,以后有钱了再申请个收费的替换即可。

我很顺利地申请到了免费的StartSSL证书,分别用在两个子域上。

最后,证书签发给你后,最主要是保护好私钥证书,这个丢失或泄漏就完了。因为如果被别人利用也就毫无安全性了,需要向证书签发机构申请撤销证书并申请新的证书,这当然也是要收费的。


应用规划、配置和调整
并不是说有了SSL证书就没事了,还要考虑应用中的使用问题,需要规划、服务器配置、应用调整等多个环节。

SSL比 http 要消耗更多cpu资源(主要是在建立连接的阶段,之后还要对内容加密),所以对一般网站,只需要对部分地方采用https,大部分开放内容是没必要的,具体取决于你的业务要求。比如对于很多安全要求较低的网站,完全不用https也是可接受的。

某些页面是同时支持 http 和 https ,还是只支持 https、强制 https?
同时支持就是用户用什么协议访问都可以,那么用户的请求主要就是由页面本身的链接引导来的,因为一般用户不会自己特意去修改地址栏的。
一般我们的网站可以做成同时支持http和https,都可以访问。但是这就容易有后面说的混合内容或混合脚本的问题。

还可以规划为部分页面支持 https,一般公开页面不用https,只是将部分地方的链接改为 https 就可以了。专门期望以 https 访问的页面中,引用的绝对URL可以明确的使用 https链接。

是否强制 https ?对于安全性高的网站或网站中的部分页面,可以强制使用https访问, 即使用户在地址栏里手工把 https 改为 http, 也会被自动重定向回 https 上。比如可以通过配置web服务器 rewrite 规则将这些 http url 自动重定向到对应的 https url 上(这样维护比较简单),而不用改应用

解决混合内容问题(http和https)

混合内容是指:在https的页面中混合了非https的资源请求,比如图片、css、js 等等。如果是混合了非 https 的 js 代码,则被称为混合脚本。
混合内容的危害:如果只是混合了不安全的图片和css,那么受中间人攻击篡改,一般只会影响页面的显示,危害相对小一点。如果是混合了不安全的 js 代码,则这个不安全的 js 可以完全访问和修改页面中的任何内容,这是非常危险的。

另请参看,Chrome对混合脚本危害的说明与提示:Trying to end mixed scripting vulnerabilities

所以,只有页面本身和所有引用的资源都是 https 的浏览器才认为是安全的,只要其中引用了非安全资源(即使图片),浏览器都会给出不安全的提示,特别是有 js 的情况。如果浏览器提示不安全,那样我们就达不到原来目的了。我们费了半天功夫去申请 SSL 证书,配置Web服务器,最后如果因为混合内容而前功尽弃就太糟了。咱继续努力吧,想办法让所有引用资源都是安全的。

理论上,混合了第三方的内容,即使是SSL的第三方内容也不是很好。因为用户信任的是你,而不是第三方,即使第三方也支持https,但你能保证第三方就绝对安全吗。不引用任何第三方才是绝对安全的,但这样太严格了,安全其实也是一个 tradeoff 的问题,需要考虑很多方面的平衡。还好,起码现在浏览器认为已经是安全的了。

引用第三方文件的问题(如 CDN 分发的文件)

简单地说,这个问题要么有第三方提供 https 支持,要么不用它(用自己本地的)。

一般我们会引用由 CDN 分发的文件,比如某个 js 库文件,而不用访问自己网站上的,这样借助 CDN 网络可以加快速度,这当然很好。
但是,如果我们在页面中使用绝对 URL 直接引用这个文件就无法自动使用 https 了!出现了混合协议内容,浏览器又该“变脸”了。

当SSL 遇上CDN 或 其它第三方文件就有点麻烦,因为很多CDN还不支持SSL。如果支持 https 的话就可以直接用 https 的绝对URL了,即使是同时支持http 和 https 的页面,这样做也不算太浪费,起码解决了问题。

因为CDN的云文件提供者,一般为每个cdn用户创建一个单独的子域名来使用,这样的话,CDN提供者要想支持 https 就必须支持所有可能的子域名,因此要求CDN提供方使用那种通配符子域名的证书。

相对 URL、绝对 URL 与 只缺协议的URL(Protocol Relative URL)
相对路径比较简单,自动匹配用户请求的 http 或 https 协议。

但是绝对 url 则不成,因为绝对 url 已经明确地写上了协议: http://www.example.com/jquery.js 。
这个问题还有一个办法解决,你一定没见过这种形式: //www.example.com/jquery.js
哈哈,一个缺少协议的URL(实际上还算是相对URL),这种形式可以在浏览器中被正确补充上合适的协议!很多人都用这种方法。
但是,这里有点小问题,IE7 和 IE8 处理这种缺少协议的URL的css 文件时,同一个css文件会下载两次,详见Steve的文章 。

JS 自动判断当前协议
现在我们经常用 js 来加载其它 js 文件或 其它别的文件,如果是请求是相对URL则没问题,如果是绝对URL怎么办?
其实 js 脚本可以这样:document.location.protocol 等于 'http:' 还是 'https:' 来判断。例如在 Google Analytics 的嵌入代码中:
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

应用程序中如何判断访问协议
对于动态页面,如 jsp、php等,也是可以动态判断当前是否使用了 https 协议的。所以应用可以根据动态判断,来生成不同的引用 URL。这样虽然有点麻烦,但也算是解决了自动识别协议的问题,当然相对路径总是不需要处理的。
比如在 jsp 中:
  • request.isSecure() 为true 表示当前为 https ,false表示 http 访问
  • request.getScheme() 返回字符串 https 或 http
注意,如果 tomcat 部署在其它web服务器代理的后面,需要正确配置好才能返回正确结果,见本文最后一部分。

同源策略的问题
最后提醒一点:http 和 https是不同源的!即使后面的内容都一样。所以 ajax 发请求的时候要使用正确协议的绝对URL才行。
相对URL的 ajax 请求没关系。


Nginx 配置
小结一下 Nginx 配置SSL注意的问题,详细安装配置内容请参考其它资料,如官方 SSL模块 和 https配置文档
1. 首先检查一下是否已安装了 SSL模块,因为默认是不包含的。

用 nginx -V 命令检查一下。如果没有ssl模块则需要重新安装(建议升级到最新版本),注意安装时加上ssl 选项:
./configure --with-http_ssl_module

另外,nginx需要依赖 openssl 提供ssl支持,这个也要有。

2. nginx.conf 中的典型配置示例
listen     80;
listen    443 ssl;
ssl_certificate      cert.pem; #修改具体文件
ssl_certificate_key  ssl.key; #修改具体文件

ssl_session_cache    shared:SSL:10m;
ssl_session_timeout  10m;

ssl_protocols  SSLv2 SSLv3 TLSv1;
ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers   on;

上面第2-4项是关键。这些配置放在 server 块就可以对其中的所有 location 生效了,并且同时支持 http 和 https 。或者把 http 和 https 分开配置也很常见。

3. 合并证书配置文件
和Apache配置不同,Nginx需要将服务器证书和ca证书链合并到一个文件中,作为 ssl_certificate 配置的内容。
例如,按照证书链从下向上的顺序,我有三个证书:
  1. ssl.crt(自己域名的服务器证书)
  2. sub.class1.server.ca.pem(startssl 的一类证书)
  3. ca.pem(startssl 的根证书)
把它们的内容按顺序连接到的一个文件中,每个内容另起一行,中间没有空行或空格。

4. 避免启动时输入密码
配好之后,启动nginx 要你输入密钥的密码。这是因为 ssl_certificate_key 配置对应的文件(也就是 startssl 给你的私钥文件)内容是加密的,需要输入你创建这个时设置的密码才能解密。这样私钥虽然很安全,但是每次重启服务都要输入一次密码也太麻烦了。其实,只要证书改为解密了的内容,就可以避免每次输入密码。用如下命令即可:
openssl rsa -in ssl.key -out newssl.key  输入密码,就生成了解密后的私钥内容,使用这个就OK了。

但是就像前面说的,一定要在服务器上保护好它,例如:
chmod 400 ssl.key (仅root可读)

5. 优化SSL配置
SSL 很消耗 CPU 资源,尤其是在建立连接的握手阶段。一是通过开启 keepalive 可以重用连接。二是可以重用和共享ssl session,见上面ssl_session相关配置。



独立Tomcat+SSL
Tomcat 是很常见的 Java应用服务器,当然也可以作为独立的 Web服务器,所有用户请求直接访问 tomcat。

如果 Tomcat 作为独立的Web服务器,那么就需要配置Tomcat就可以了,文档参考这里 和 这个。主要是配置存放证书的 Keystore 和 连接器Connector。

Java的keystore
keystore 是 Java 中专用并内置的一个类似于 openssl 的工具,一个 keystore 文件就是一个“保险箱”(database),专门存放证书和密钥,和相关的管理功能:生成自签发的证书、密钥、导入导出等。可以通过 keytool 命令或 Java api 交互。
利用keytool 命令将你的证书导入进去。

Tomcat中Connector
tomcat中有三种 Connector 实现:block、nio 和 APR。前两者使用Java SSL(这需要 keystore 的配置 ),APR使用OpenSSL(不需要用keystore,直接指定证书),配置略有不同。



Nginx+Tomcat+SSL
实际上,规模的网站都有很多台Web服务器和应用服务器组成,用户的请求可能是经由 Varnish、HAProxy、Nginx之后才到应用服务器,中间有好几层。而中小规模的典型部署常见的是 Nginx+Tomcat 这种两层配置,而Tomcat 会多于一台,Nginx 作为静态文件处理和负载均衡。

如果Nginx作为前端代理的话,则Tomcat根本不需要自己处理 https,全是Nginx处理的。用户首先和Nginx建立连接,完成SSL握手,而后Nginx 作为代理以 http 协议将请求转给 tomcat 处理,Nginx再把 tomcat 的输出通过SSL 加密发回给用户,这中间是透明的,Tomcat只是在处理 http 请求而已。因此,这种情况下不需要配置 Tomcat 的SSL,只需要配置 Nginx 的SSL 和 Proxy。

在代理模式下,Tomcat 如何识别用户的直接请求(URL、IP、https还是http )?
在透明代理下,如果不做任何配置Tomcat 认为所有的请求都是 Nginx 发出来的,这样会导致如下的错误结果:
  • request.getScheme()  //总是 http,而不是实际的http或https
  • request.isSecure()  //总是false(因为总是http)
  • request.getRemoteAddr()  //总是 nginx 请求的 IP,而不是用户的IP
  • request.getRequestURL()  //总是 nginx 请求的URL 而不是用户实际请求的 URL
  • response.sendRedirect( 相对url )  //总是重定向到 http 上 (因为认为当前是 http 请求)

如果程序中把这些当实际用户请求做处理就有问题了。解决方法很简单,只需要分别配置一下 Nginx 和 Tomcat 就好了,而不用改程序。
配置 Nginx 的转发选项:

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 X-Forwarded-Proto  $scheme;

配置Tomcat server.xml 的 Engine 模块下配置一个 Value:
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="X-Forwarded-For" protocolHeader="X-Forwarded-Proto" protocolHeaderHttpsValue="https"/>

配置双方的 X-Forwarded-Proto 就是为了正确地识别实际用户发出的协议是 http 还是 https。X-Forwarded-For 是为了获得实际用户的 IP。

这样以上5项测试就都变为正确的结果了,就像用户在直接访问 Tomcat 一样。

原文地址:http://han.guokai.blog.163.com/blog/static/136718271201211631456811/


admin 发布于  2015-9-24 22:51 

nginx配置ssl加密(单双向认证、部分https) 技术文章

nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番。一开始采用的是全站加密,所有访问http:80的请求强制转换(rewrite)到https,后来自动化测试结果说响应速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他们怎么测的。所以就试了一下部分页面https(不能只针对某类动态请求才加密)和双向认证。下面分节介绍。

默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with-http_ssl_module选项。

关于SSL/TLS原理请参考 这里,如果你只是想测试或者自签发ssl证书,参考 这里 。

提示:nignx到后端服务器由于一般是内网,所以不加密。

1. 全站ssl

全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证。

server {
        listen 443;
        server_name example.com;
        root /apps/www;
        index index.html index.htm;
        ssl on;
        ssl_certificate ../SSL/ittest.pem;
        ssl_certificate_key ../SSL/ittest.key;
#        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
#        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#        ssl_prefer_server_ciphers on;
}



如果想把http的请求强制转到https的话:

server {
  listen      80;
  server_name example.me;
  rewrite     ^   https://$server_name$request_uri? permanent;
### 使用return的效率会更高 
#  return 301 https://$server_name$request_uri;
}


ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。

ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。

ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。

ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

https优化参数

  • ssl_session_cache shared:SSL:10m; : 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是sharedbuildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。 详细参考serverfault上的问答ssl_session_cache
  • ssl_session_timeout : 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h

设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了。

提示:在生成证书请求csr文件时,如果输入了密码,nginx每次启动时都会提示输入这个密码,可以使用私钥来生成解密后的key来代替,效果是一样的,达到免密码重启的效果:

 
openssl rsa -in ittest.key -out ittest_unsecure.key


导入证书

如果你是找一个知名的ssl证书颁发机构如VeriSign、Wosign、StartSSL签发的证书,浏览器已经内置并信任了这些根证书,如果你是自建C或获得二级CA授权,都需要将CA证书添加到浏览器,这样在访问站点时才不会显示不安全连接。各个浏览的添加方法不在本文探讨范围内。

2. 部分页面ssl

一个站点并不是所有信息都是非常机密的,如网上商城,一般的商品浏览可以不通过https,而用户登录以及支付的时候就强制经过https传输,这样用户访问速度和安全性都得到兼顾。

但是请注意不要理解错了,是对页面加密而不能针对某个请求加密,一个页面或地址栏的URL一般会发起许多请求的,包括css/png/js等静态文件和动态的java或php请求,所以要加密的内容包含页面内的其它资源文件,否则就会出现http与https内容混合的问题。在http页面混有https内容时,页面排版不会发生乱排现象;在https页面中包含以http方式引入的图片、js等资源时,浏览器为了安全起见会阻止加载。

下面是只对example.com/account/login登录页面进行加密的例子:

root /apps/www;
index index.html index.htm;
server {
    listen      80;
    server_name example.com;
    location ^~ /account/login {
        rewrite ^ https://$server_name:443$request_uri? permanent;
    }
    location / {
        proxy_pass  http://localhost:8080;

        ### Set headers ####
        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_redirect     off; 
    }
}
server {
    listen 443 ssl;
    server_name example.com;
    ssl on;
    ssl_certificate ../SSL/ittest.pem;
    ssl_certificate_key ../SSL/ittest.key;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    location ^~ /account/login {
        proxy_pass  http://localhost:8080;
        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_redirect     off; 
        ### Most PHP, Python, Rails, Java App can use this header -> https ###
        proxy_set_header X-Forwarded-Proto  $scheme;
    }
    location / {
        rewrite  ^  http://$server_name$request_uri? permanent;
    }
}


关于rewrite与location的写法参考这里。当浏览器访问http://example.com/account/login.xx时,被301到https://example.com/account/login.xx,在这个ssl加密的虚拟主机里也匹配到/account/login,反向代理到后端服务器,后面的传输过程是没有https的。这个login.xx页面下的其它资源也是经过https请求nginx的,登录成功后跳转到首页时的链接使用http,这个可能需要开发代码里面控制。

  • 上面配置中使用了proxy_set_header X-Forwarded-Proto $scheme,在jsp页面使用request.getScheme()得到的是https 。如果不把请求的$scheme协议设置在header里,后端jsp页面会一直认为是http,将导致响应异常。
  • ssl配置块还有个与不加密的80端口类似的location /,它的作用是当用户直接通过https访问首页时,自动跳转到不加密端口,你可以去掉它允许用户这样做。

3. 实现双向ssl认证

上面的两种配置都是去认证被访问的站点域名是否真实可信,并对传输过程加密,但服务器端并没有认证客户端是否可信。(实际上除非特别重要的场景,也没必要去认证访问者,除非像银行U盾这样的情况)

要实现双向认证HTTPS,nginx服务器上必须导入CA证书(根证书/中间级证书),因为现在是由服务器端通过CA去验证客户端的信息。还有必须在申请服务器证书的同时,用同样的方法生成客户证书。取得客户证书后,还要将它转换成浏览器识别的格式(大部分浏览器都认识PKCS12格式):

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12


然后把这个client.p12发给你相信的人,让它导入到浏览器中,访问站点建立连接的时候nginx会要求客户端把这个证书发给自己验证,如果没有这个证书就拒绝访问。

同时别忘了在 nginx.conf 里配置信任的CA:(如果是二级CA,请把根CA放在后面,形成CA证书链)

proxy_ignore_client_abort on;
    ssl on;
    ...
    ssl_verify_client on;
    ssl_verify_depth 2;
    ssl_client_certificate ../SSL/ca-chain.pem;
# 在双向location下加入:
    proxy_set_header X-SSL-Client-Cert $ssl_client_cert;


拓展:使用geo模块

nginx默认安装了一个ngx_http_geo_module,这个geo模块可以根据客户端IP来创建变量的值,用在如来自172.29.73.0/24段的IP访问login时使用双向认证,其它段使用一般的单向认证。

geo $duplexing_user {
    default 1;
    include geo.conf;  # 注意在0.6.7版本以后,include是相对于nginx.conf所在目录而言的
}



语法 geo [$address] $variable { … },位于http段,默认地址是$reoute_addr,假设 conf/geo.conf 内容:

127.0.0.1/32    LOCAL;  # 本地
172.29.73.23/32 SEAN;   # 某个IP
172.29.73.0/24  1;      # IP段,可以按国家或地域定义后面的不同的值




需要配置另外一个虚拟主机server{ssl 445},里面使用上面双向认证的写法,然后在80或443里使用变量$duplexing_user去判断,如果为1就rewrite到445,否则rewrite到443。具体用法可以参考nginx geo使用方法

参考

原文地址:http://seanlook.com/2015/05/28/nginx-ssl/



admin 发布于  2015-9-24 21:48 

NginxRewrite规则判断普通用户与搜索引擎爬虫(UA)实现https跳转 技术文章

nginx.jpg

前段时间写了一篇关于给博客安装证书加密访问的文章,在站长平台,百度说支持https,一个月后发现网站的流量排名跌成了狗,为了逼格保留这个https,又为了不和百度做对,查阅相关资料后选择用user_agent来解决,nginx本身就能判断UA,以下代码供大家参考,添加到nginxRewrite配置文件里即可,域名换成自己的。

000039-2015-09-24.jpg

具体的代码如下(复制吧-骚年):



server {
listen 80;
server_name mrxn.net mrxn.net;
set $flag 0;
if ($host != 'mrxn.net') {
 set $flag 1;
}
if ($server_port = 80) {
 set $flag 1;
}
if ($scheme = http) {
 set $flag 1;
}
if ($http_user_agent ~* (baiduspider|soso|sogou|yahoo|sohu-search|yodao|YoudaoBot|robozilla|msnbot|MJ12bot|NHN|Twiceler)){
 set $flag 2;
}
if ($flag = 1){
 rewrite ^/(.*)$ https://mrxn.net/$1 redirect;
}
error_page 497 https://mrxn.net$request_uri;

}



这段规则具体作用是:将国内部分对https支持不好的搜索引擎蜘蛛定向到http页面,将普通用户和其他搜索引擎定向到https页面(谷歌更喜欢https站点)。


相关文章:

一段代码让nginx实现网站资源防盗链

nginx配置location总结及rewrite规则写法

nginx配置ssl加密(单双向认证、部分https)

NginxRewrite规则判断普通用户与搜索引擎爬虫(UA)实现https跳转

SSL/TLS原理详解

OpenSSL 与 SSL 数字证书概念贴

基于OpenSSL自建CA和颁发SSL证书


原文属于博友创造:https://tmy123.com/user-agent.html


admin 发布于  2015-9-24 21:26 

浅谈HTTPS链接的重要性和安全性 网络安全

03.png

今天我的一位仁兄被人误导说HTTPS慢,就这个问题我们来浅谈下HTTPS的速度和安全。首先HTTPS是一个优良而且很棒的协议,他为服务器和客户端之间的数据传输提供了强有力的保障。浅谈HTTPS的速度和安全事实证明HTTPS速度是快的。

Mrxn通过实验测试结果证明,HTTPS确实需要CPU来中断SSL连接,这需要的处理能力对于现代计算机而言是小菜一碟了,你会遇到SSL性能瓶颈的可能性完全为0,首屏加载时间与HTTP协议的时间几乎一致。慢,只会在你网络出现问题的时候发生,和SSL/HTTPS毫无干系,或者极有是你的应用程序性能上遇到瓶颈。
HTTPS是一个重要的连接保障
虽然HTTPS并不放之四海而皆准的web安全方案,但是没有它你就不能以策万全。所有的web 安全都倚赖你拥有了HTTPS。如果你没有它,不管对密码做了多强的哈希加密,或者做了多少数据加密,攻击者都可以简单的模拟一个客户端的网络连接,读取它们的安全凭证,极具威胁。此外,证书签名很显然不是一个完美的实践,但每一种浏览器厂商针对认证机构都有相当严格和严谨的规则。要成为一个受到信任的认证机构是非常难的,而且要保持自己良好的信誉也同样是困难的。
HTTPS流量拦截可以避免
本质上讲,可以使自己的客户只去信任真正可用的 SSL 证书,有效的阻挡所有类型的SSL MITM攻击,如果你是要把 SSL 服务部署到一个不受信任的位置,你最应该考虑使用SSL证书。
HTTPS拥有免费的证书服务
国内和国外都提供了免费的基础等级SSL证书,普及了SSL的支持。 一旦让加密的方案上线,你就能够对你的网站和服务进行100%的加密,完全没有任何花费。
HTTP 在私有网络上并不安全
如果一个攻击者获得了对你的任何内部服务的访问权限,所有的HTTP流量都将会被拦截和解读,这就是为什么HTTPS不管是在公共网络还是私有网络都极其重要的原因。如果是把服务部署在AWS上面,就不要想让你的网络流量是私有的了,因为AWS网络就是公共的,这意味着其它的AWS用户都潜在的能够嗅探到你的网络流量。
2015年百度启用HTTPS搜索
在2015年5月,百度也启用了HTTPS安全搜索,并且支持HTTPS站点的积极优先收录,更可以证明,互联网巨头也开始注重网络传输安全了。
总结
如果你正在做网页服务,毫无疑问,你应该使用 HTTPS。它很容易且能获得用户信任,没有理由不用它。作为ICP,作为程序员我们必须要承担起保护用户的重任。
PS:没有经过事实验证的任何说法,不值得我们信任!


admin 发布于  2015-9-17 19:03