在ququ的日志里,有提及到使用https,当时看到后,很是动心,由于某些原因,最终只是看一看罢了。
前不久苹果发布了 iOS7.1正式版,这个更新有很多功能改进,其中包括对于app的在线安装的要求提示,文件的url地址必须为使用了ssl 的url,否则应用会安装失败。
开始我并不知道,在给客户发布app新版本的时候,发现无法安装。得,这最后还是要使用https 了。于是我马上就想到了ququ 的那个日志,重温下日志后就去了他们的官网 http://www.thawte.com/。
这个供应商提供ssl 证书和应用程序签名。我们这里只需要使用 ssl 证书。其实呢,我一共交易了2次,第一次域名输错了,好在供应商服务很不错,30天内可以退款的。
对于windows 服务器而言,首先需要在 IIS 里设置,打开服务器证书选项,然后选择“创建证书申请”,按照向导一步步地填写下去,需要注意的是,里面涉及的网址就是需要使用ssl证书的网址。此外还有一点是选择加密长度,长度越大,安全性越高,但是解析的时间也越长。衣服自己洗第一次交易就是由于没有填写带 www 前缀的网址,不过好在thawte很厚道,30天内可以随时revoke掉这个证书。
通过这一步,我学会了revoke这个单词,是不是很神奇的样子?好处就是后来我经常revoke苹果的证书。
按照向导创建完申请后,我们进入到 thawte 的网站,开始完成支付流程,并上传刚才创建的证书,输入验证邮箱。如果顺利的话,一天不到输入的验证邮箱里就可以收到他们的邮件了,邮件里还会附加证书内容。然后进入服务器,导入证书。最后选择网站,设置证书就可以了。这几个步骤就非常简单,衣服自己洗就略过不提啦。
很简单,对不对。
顺利的话当然简单,衣服自己洗就不顺利。在验证邮箱的时候,网页里提示你选择验证邮箱,比如说网站是 withonly.com,那么就有 admin、administraotr、webmaster 这样的前缀可以选择,同时,网页还提供了自定义的文本框。没有想到的是这里居然是一个大坑。衣服自己洗由于是使用的 me 前缀,就选择了自定义模式。结果后面就完全思密达了,邮箱里收不到邮件,交易处于pending 状态,只好找他们的客服,客服很是严谨,各种认证。我和客服说我不会英文,客服居然说她可以说中文,然后要了我的电话给我打过来,诶哟喂,是个妹子的声音你们晓得不啦。
现实生活中屌丝久了,连和妹子说话的机会都没有,所以很高兴有没有。呃,扯远了。所以到时候大家可千万不要选择邮箱的自定义模式,估计这里是他们网站的bug。
到这里证书的是就算完成了,但是整个事情,还没有完成。我们输入 https://www 这样的网址,是可以看到地址栏上的锁出现,但是现在一般网站会把没有www前缀的也自动跳转到 www 上。所以还需要额外做一些重定向,把 http 的请求给重定向到 https 上面来。我这人比较偷懒,在服务器上直接使用了 IIRF 组件实现的。
最后,说下价格,我买的应该最便宜的那种 149美元一年。有需要的同学,可以去看看。
最近工作中要用到一个小工具,出于快速开发的目的,使用c#作为开发语言,放弃了c++,功能简单,当然是怎么方便怎么来。其它的功能这里就不说了,衣服自己洗这里要分享的就是其中的一个功能,对全球化多语言的支持。
.Net中要实现全球化,是把不同的语言放在不同的字典中,然后运行时动态选择。具体实现来说,可以有2种方式:
1、系统自带的Resources.resx文件
Resources.resx 是.Net提供的一个资源文件,可以提供对字符串,图片、二进制数据的存储,Resources.resx 本质上是一个xml 文件。比如,我们通过 VS 在文件中添加一个字符串,键为 Name,值为 唠叨下。
接下来,是考虑如何在程序中调用,非常简单,我们可以这样写 string name = Properties.Resources.Name;
注意这里的Name即为我们在Resources.resx里定义的键。之所以可以这么来调用,是由于VS自动帮助我们在 Resources.Designer.cs文件中定义了相关的方法。如果细心点,你会发现还可以使用Resources.ResourceManager 的GetString()方法和GetObject()方法,也可以达到相同的目的。拿到了值后,我们就可以做对应的显示了。
上面是第一步,接着我们来进行第二步。我们直接复制Resources.resx文件,并粘贴后改名,例如Resources.en-US.resx。这里需要说2点,一个是文件名格式,en-US是语言。另外一个是重命名后,Resources.en-US.Designer.cs里的内容给清空了,这个是没有关系的。事实上如果不清空,编译会报错。
这个时候,编译我们的工程,会发现在bin目录下生成一个en-US目录,里面有一个dll文件。默认的Resources.resx不会生存额外的文件夹,会直接编译到主程序中。
最后,我们需要添加显示,不然程序运行始终显示的是里的字符串。在程序的入口添加下面的代码,表示以当前系统的显示语言作为程序的语言。
Thread.CurrentThread.CurrentUICulture = new CultureInfo(System.Globalization.CultureInfo.CurrentUICulture.Name);
有的软件可能想要提供一个菜单,供用户主动选择语言,那么在初始化的时候,可以传入语言参数,例如 new CultureInfo(“zh-CN”)等等。
经过上面的处理,程序在运行的时候,就会得到我们需要的语言。
2、自定义的方式
上面的方式在编译后,会根据不同的语言生成对应的文件夹。例如我要做的小工具,就要生成28个国家的文件夹。看起来是不是很猥琐?我这里做过尝试,把所有的语言文件夹移动同目录下的一个新文件夹中,例如 Language 是不可行的。
还比如说,多语言的翻译和开发是同步进行的,希望以后再不重新编译版本的情况下新增别的语言等等各种需求,我们可以自定义。
不想要那么多文件夹,可以把所有的多语言翻译都放在Resources.resx文件里,并添加语言前缀,例如zh-cn_Name等等,利用Resources.resx会被编译到主程序的原理,就解决了过多的文件夹的问题。
对于想要动态新增语言,就只好将多语言放到数据库或者xml配置文件里,按语言取名,程序读取的时候来解析数据库或者xml。好处是只要新增了xml,程序不需要编译就支持了。缺点是由于可以修改,如果用户手动修改的话,可能会导致一些意外产生,不过额外做一些加密操作应该可以过滤掉大部分误操作。
衣服自己洗在上面介绍了2种方式,各位同学可以根据实际情况灵活采用不同的方式。满足了老板的需求,剩下的就是喝啤酒泡妹子去了。