2010年年底之前,我们成功地用上了支付宝的Linux控件;2011年年初,我们不妨展望一下今年年底网银对Linux的情况, 趁2011还没结束赶紧意淫一番~ 希望听到大家的看法 :)
众所周知,国内大多数网银不支持非IE,更不支持Linux,给使用Linux的朋友带来极大的不便. 然而,也有少数网银在跨平台上面做的很优秀,例如浦发银行. 关于网银的平台兼容性,可以参考 : http://www.openbanks.info/ 网上银行,商店和支付平台兼容性列表 感谢openbanks的站长张韡武! 对于网银这样无奈的问题,最理想的解决方案莫过于用脚投票,迁移到支持跨平台的银行,可是也有更无奈的情况, 例如:在校学生,银行卡和校园卡绑定;或者,生活,工作的地方附近难以找到浦发之类的银行. 这时候,解决的方案不外乎以下几种: 1.用某些方法尽量绕过网银的限制,例如使用支付宝的时候,结合支付宝卡通; 2.采取投诉的手段,争取银行支持Linux; 3.借助法律手段,存心找茬,看看网银不支持Linux是否存在法律上的问题,提起诉讼; 4.hack,利用wine等方法在Linux上使用网银; 5.寄望于Linux厂商和网银展开合作,例如对于国产的中标麒麟,或许网银的支持可以作为衡量两亿资金是否白拿的依据之一, 至于即将发布的Ubuntu中国版,或许还没有足够大的影响力. 其中第一种方法,或许大家都在用了;第2,3种方法,或许天朝Linux用户都认为不现实;第5种方法,天朝Linux用户被代表笑而不语 :) 至于第4种方法,到底有多大的可能性呢? 很想听听各位的看法,也把我所了解的一点东西分享一下,希望能够起到抛砖引玉的效果. 由于我使用的是工行的个人网银+捷德u盾,所以我所做的实验也只能限于工行网银和捷德u盾. 首先,工行网银( https://mybank.icbc.com.cn ) 的登录页面有两个比较恶心的地方, 1是使用了ActiveX控件,2是使用了VBscript. 对ActiveX的支持一直是wine项目的目标之一,从wine1.3.9开始,wine的内置IE (基于gecko内核) 也开始支持 ActiveX, 所以,使用wine 原生IE来登录网银是有希望的.然而,目前wine项目却没有人在做有关VBscript的支持,所以这份人希望里面可能要排除工行网银. 不过,wine上面也可以安装MS原装的IE6,经过实验,我发现,wine MSIE (通过winetricks安装) 可以支持工行的网银登录, 不过安装安全控件之前需要先用winetricks安装mfc42,再手动复制scarddlg.dll这个文件到system32文件夹中. 使用wine运行MSIE终究难逃法律上的问题,所以这一方案不是最可取的. 其实,在最新的wine1.3.12上,内置的IE对ActiveX的支持已经比较像样了,使用wine1.3.12可以安装支付宝的windows版控件 (注:支付宝已经提供了Linux版的控件,此处仅为蛋疼实验) 安装之后,wine的内置IE可以显示出支付宝的登录框,遗憾的是仍然不能成功登录. (如果有朋友成功了不妨分享一下) 总的来说,以wine项目每两周一个新版本的开发速度来预测,或许在2011年的年底, 我们有机会在Linux上使用wine builtin IE 成功登录某些依赖ActiveX的网银,前提是不依赖vbscript. 接下来是VBscript的问题.wine项目的开发者表示,目前没有人在做有关vbscript的开发,除非有志愿者参与贡献代码. 照此看来,要在2011年底支持vbscript估计是不可能的了. 不过vbscript其实不是真正的障碍,因为vbscript能做到的事情javascript基本也能做到,对于geek来说, 可以通过油猴脚本之类的手段修改html代码,用相同功能的javascript替换掉vbscript. 更长远的说,在linux上实现vbscript的支持也是有可能的,因为libreoffice已经开始实现支持vba宏, 而vba宏和vbscript是有很多相似之处的. 小结:vbscript不是重点 前面两个或许还不算超级蛋疼,最严重的一个问题,恐怕是u盾的驱动了. 如果没有u盾,即使能登录网银,也没办法交易( 1.我不是密码卡的用户,没有办法测试,不知道有没有使用密码卡的用户有兴趣测试一下? 2.我用wine IE登录,可以正常查询余额,也"几乎"可以转帐,可惜在即将输入u盾密码的哪一步,浏览器会提示找不到u盾) 过去由于wine的crypt32.dll的一个bug,工行的u盾驱动是无法在wine上安装的,但是wine1.3.12已经修复了这个bug. 然而,能够安装不等于能够支持.关键的问题在于,wine的官方至今还没有足够的人手可以去做对windows原装usb驱动的支持. 目前wine能支持的usb设备,必须是该设备已经有Linux版的驱动,wine只能间接地支持. 其实,08年开始,wine项目之外,有非官方的开发者Alexander Morozov开始实现wine对windows原装usb驱动的支持,但是补丁不被官方接受 (参见: http://wiki.winehq.org/USB ) 然而,即使打上了usb支持的补丁,我也无法在wine上使用u盾.我还尝试过一些u盘量产工具,还有chipgenius,结果表明wine的usb补丁还很不完善. 如今有另一位开发者 Damjan Jovanovic 也在做Alexander做的工作,并且他希望能够继续改进以致wine官方愿意接受补丁. 这里面需要做的事情很多,究竟2011年底能否有质的改变,很难说. 根据实验结果( http://goo.gl/u2zEL ) ,我发现工行的捷德u盾依赖于scardsvr.exe这个程序,wine目前没有实现scardsvr.exe, 直接使用原装的scardsvr.exe会出错 (如果有谁实验成功了请一定要分享!) 另外,捷德u盾还需要winscard.dll的支持,这是一切类智能卡设备都需要的.wine的winscard.dll还很不完善, 使用原装winscard.dll之后发现,这个dll调用了user32.dll中的一些函数是wine未实现的. 而user32.dll是系统最底层的dll,不可以用原装的版本来替换. 尽管ReactOS项目和Longene项目的大部分dll都是和wine共享的,不过比较user32.dll的代码后发现wine中未实现的函数reactos和longene也未实现. 还有一个项目叫做scard4wine ( http://scard4wine.sourceforge.net/ ),可以绕过user32.dll提供一个不同的winscard.dll. 这个项目的目标是把windows程序对winscard.dll的调用重定向到pcsc-lite库上. pscs-lite项目( http://pcsclite.alioth.debian.org/ ) 为标准的CCID类型的智能卡提供原生的Linux驱动支持.也就是说,理论上,如果一款u盾是标准CCID设备, 那么pscs-lite项目就会为这款u盾开发linux驱动,而scard4wine就能利用pscs-lite提供必要的api,让网银的u盾控件调用. 可惜的是,根据pscs-lite的wiki上的说明 ( http://pcsclite.alioth.debian.org/ccid.html#CCID_compliant ), 经过测试,我发现工行u盾不是标准CCID设备 (但是看起来跟CCID很有联系 ) 不知有没有其他朋友使用别的u盾刚好是标准CCID设备呢?不妨试试,或许有希望. 说了这么久CCID,其实我google了很久也没明白CCID到底是什么,如果有明白的朋友讲解一下就好了!谢谢! 说到u盾驱动,不得不提的是,和捷德u盾的同一家总公司的某些同类产品是有Linux驱动的,并且同时支持ActiveX调用和java applet调用两种方案. 可惜这些产品都是捷德国外的某些分公司的产品. 参见: Feitian ePass PKI token http://www.gooze.eu/feitian-epass-pki-token Smartcard quickstarter guide http://www.gooze.eu/howto/smartcard-quickstarter-guide 我曾发邮件向捷德索取Linux版的u盾驱动,当然结果如何大家不用问也都知道啦. 小结:u盾驱动,蛋疼得要命. 很多朋友可能也关心国外的网银的问题.一直以来,我都以为国外的网银对Linux的支持是制度上规定的,后来读了一篇文章, 才知道有些网银并没有提供官方的Linux支持,只是由于本身使用的是标准技术,就自然支持Linux了,例如美国银行就是这样. 但是老外可较真了,非要美国银行在用户说明中声明支持Linux不可.参见: Bank of America Rep Responds To No Linux Support http://www.linuxtoday.com/news_story.php3?ltsn=2010-12-20-004-35-NW-BZ-DT 在对wine网银的可行性充满绝望之际,我还想和大家分享一下我对wine的看法~ 我觉得,Linux上bug最多的软件就是wine了:) 大多数新手对wine抱有很大的希望,结果却失望而归,我觉得一个重要的原因是,新手不懂写bug report, 而等到新手慢慢失望慢慢熬成老手的时候已经不再依赖wine了,结果就造成了wine很多bug却很少人报告, 于是旧的bug没有人修复,于是新一代的新手又一次随着对wine渐渐失望渐渐变成老手 :) 其实,wine可以说是最需要bug report的项目了.wine的工程十分复杂,不知道何年何月才能完美,而在这之前, 哪些bug先被报告,哪些问题就有机会先被解决. 尤其是有些软件在wine上运行崩溃的问题,可能是某个不关键的函数没有被实现,这时候如果能报一个bug,那么开发者只要 写一个空的函数 (也就是所谓的 stup,不知怎么翻译) ,就有可能暂时解决崩溃的问题, 让软件勉强可以使用. 只有软件勉强跑起来了,才可能发现更多的问题,才能进一步完善wine.所以这种情况写一个简单的bug report可以说是性价比挺高的事情. 另一方面,如果我们想知道从windows迁移的用户有哪些需求是Linux发行版急需解决的,那么到wine的论坛上看看大家都在求助什么问题或许能够受到启发. 顺便说一下,wine项目这几年都参与了google代码夏令营,今年又开始招学生了.如果有童鞋有兴趣,可以看这里: http://wiki.winehq.org/SummerOfCode wiki中有一些idea,但是winetricks的作者,wine的开发者之一,Dan Kegel 说这些idea都不够好,非常希望能有更多学生带着更好的idea来报名. Dan Kegel举例说比如在wine中实现vbscript的支持,就是一个很好的项目. 个人认为,如果有谁有兴趣在wine中实现原装windows usb驱动支持的话, 那也是相当cool的 :) 如果有兴趣报名,只要带着自己的idea到wine-devel列表发个邮件介绍自己就好了.如果有机会被看上,会有导师带领. Dan Kegel 也是导师之一. wine项目同时欢迎其他愿意到wine中为Google Summer Of Code作导师的开发者. 最后,春节快到了,预祝大家春节快乐,看广告的时候没被春晚打断 :) -- Regards, Qian Hong - Sent from Ubuntu http://www.ubuntu.com/ -- ubuntu-zh mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-zh
