解决自动更新 cab 中提取第三方的根目录列表失败问题

今天检查了一下新装的Windows 7系统的事件,在控制面板,事件查看器中 - Windows 日志 - 应用程序,发现有大量来源为CAPI32的错误,甚至已经“达到 50 事件的 crypt32 阈值,将暂停记录 60 分钟。”的警告,看来问题不小,具体错误描述如下:

在 <http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab> 从自动更新 cab 中提取第三方的根目录列表失败,错误为: 根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内。

寻求网络后得到微软的KB文章一篇 《在 Windows Vista、Windows Server 2008 以及更高版本的 Windows 和 Windows Server 的应用程序日志中记录了事件 ID 4107 或事件 ID 11》 ,得知这个问题是由于“Microsoft 证书信任列表发行商证书已过期。CryptnetUrlCache 文件夹中存在签名证书已过期的 CTL 的副本。 ”,所以要清除过期缓存,微软为我们提供了两种解决方案,其中第一种最为简单和人性化,使用微软的Fix It一键快速修复, 下载地址在这里 。第二种办法就是遵循下面的步骤手动修复(我这里大概摘录一下,详细的请访问原文):

Posted in:
  • 计算机应用及维护
  • Windows系统
Tagged
  • 系统故障

获取系统安装日期与Unix时间戳(Unix timestamp)

我们在安装Windows系统时,系统已经给我们将第一次初始装机的日期写入到注册表中,以便于我们以后备查,最通常的做法是开始-运行-输入cmd确定,打开命令提示符,输入 systeminfo 这个命令,然后就会获取初始安装日期。那么这个日期究竟保存在注册表什么地方呢?

使用regedit打开注册表编辑器,定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 分支,在右边键值中找到 InstallDate ,对的这个就是我们要找的安装日期。

注册表系统安装日期.png

我们双击这个日期,这时注册表显示“编辑 DWORD 值”对话框,默认基数是16进制的,我们先改成10进制的,什么?看不懂这个时间?先不急,这个是Unix时间戳,接下来我就要介绍这个。

Posted in:
  • 计算机应用及维护
  • VBScript/JavaScript/Python
  • Windows系统
  • 系统应用程序开发
Tagged
  • 日期时间
  • 系统信息

解决Command line option syntax error问题

最近装了一台Windows 7 64位系统,然后为了安装某个软件,需要安装Microsoft Visual C++ 2005 Redistributable Package可再发行组件包,到微软官方网站上下载后安装 (x86) (x64) ,可是出现下面的错误框:

vcredist_x64安装错误.png

Command line option syntax error. Type Command /? for Help.意思大概是“命令行选项语法错误,输入命令/?寻求帮助”。其实微软的这些安装包除了双击安装外,还支持通过附加命令启动,比如附加命令选择静默安装,这也就是为什么某些安全软件可以打补丁,而补丁的安装界面不会出现的原因。

Posted in:
  • 计算机应用及维护
  • Windows系统
Tagged
  • 安装故障

寻找已安装软件丢失的产品序列号(CD-KEY)

安装序列号又称为CD-KEY或者Product-Key,主要是用来验证用户是否是软件的合法拥有者,当第一次安装时可能会要求输入,输入正确后,软件才能正常安装并使用,并且以后不再需要输入这个序列号,由于序列号是唯一的,只在软件第一次安装或运行时需要,而且多数软件商喜欢把这个号写在产品说明书或者光盘上,不过随着时间的流逝我们有可能丢失这些印有序列号的说明书或者光盘,然后某一天当我们发现需要重新安装软件时,彻底杯具了。

不过下面我介绍的软件可能会补救一下,一般这些软件商喜欢在第一次输入序列号后将序列号存储入系统的注册表里,所以我们可以读取注册表来获取这类重要信息,比如说Windows XP/Vista/7操作系统的序列号就存储在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 注册表路径下,键名称为DigitalProductId,不过貌似是二进制的,没关系,我在这里为大家准备了读取Windows XP系统信息的WScript/VBScript脚本,其中有一项就是解码并获取系统安装序列号:

Posted in:
  • 软件推荐及相关资讯
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • 系统工具
  • 序列号

WScript/VBScript 获取脚本所在文件夹及任意文件所在目录路径

Windows脚本宿主(Windows Scripting Host或WSH)确实给我们编写本地脚本带来了方便,但是如何获取脚本文件自身目录或者是任意文件所在的目录路径呢?在Win32编程中我们可以通过PathRemoveFileSpec这样的Path*系列API,来对文件路径进行处理,当然这里是脚本,正常情况下没有访问Win32 API的权限,不过也有变通的办法来实现类似的功能。

下面我以获取脚本所在文件夹目录路径为例,讲解一下如何处理这类问题,WSH为我们提供了一个环境变量,名称为WScript.ScriptFullName或者写成WSH.ScriptFullName,通过直接输出变量,我们很容易得到脚本的全路径,当然这个是包含脚本名称的,类似于C:\ScriptsFolder\Sample.vbs这样的路径,如何得到C:\ScriptsFolder\呢?比如我们要向这个目录下写入配置文件,大家肯定会想到,我们去掉Sample.vbs不就可以了,是的,这是个办法,当然去掉的办法有很多,比如说基本的InStrRev函数,查找\斜杠,然后再Left截取字符串,这个思路就形成了我们第一个函数PathRemoveFileSpec1:

Function PathRemoveFileSpec1(strFileName)
  ' 将类Unix路径 / 替换为 \
  strFileName = Replace(strFileName, "/", "\")
	
  Dim iPos
  ' 从路径末尾开始搜索\,这样从第一个字符到这个位置
  ' 就是我们所需要的
  iPos = InStrRev(strFileName, "\")
  ' 使用Left保留需要的部分
  PathRemoveFileSpec1 = Left(strFileName, iPos)
End Function

' 测试输出
WScript.Echo PathRemoveFileSpec1(WScript.ScriptFullName)
Posted in:
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • wscript
  • vbscript
  • 文件操作

Excel/VBA宏打印奇数偶数页并实现正反打印

大家都知道Word里面有一项设置可以让我们选择打印奇数页还是偶数页,这样我们很容易就实现了Word的正反打印,Excel中貌似找不到这个选项,如果你的打印机支持的话,你可以通过页面设置,工作表选项卡,选项按钮,切换到完成方式,可能会有奇数偶数或者正反打印,当然这一切取决于你的打印机驱动是否支持,如果找不到,那该怎么办呢?难道只能手动打印吗?

其实我们可以利用VBA宏变通一下的,首先获取总页数,奇数页打印也就是从1开始,然后1、3、5、7、9,步长为2,利用VB语言可以描述如下:

' TotalPages就是总页数
' Step是计算步长,这里i每次加2
For i=1 To TotalPages Step 2
  ' 打印 i 页
Next i

这里很明显将打印1、3、5、7、9这样的奇数页,如果是2、4、6、8、10这样的偶数页该怎么办呢,可以看出步长依旧是2,只是起始从2开始了,那么i初始应该设置为2。

通过PrintOut方法就能进行打印了,这里我们默认打印选中的Sheet,所以使用ActiveWindow.SelectedSheets:

Posted in:
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • excel
  • vba

Linux/VPS环境下Nginx安全配置小记(1)

关于Nginx介绍我就不多说了,下面主要记录一下我所收集的一些有用的配置,多数是和服务器安全相关的。以下部分参考了nixCraft上的 《Top 20 Nginx WebServer Best Security Practices》 这篇文章很有借鉴意义,详细讲解了Linux+Nginx服务器安全的方方面面,这篇文章的中译版叫《20个Nginx Web服务器最佳安全实践》,大家可以搜索一下。

1. 删除不需要的Nginx模块

我们可能根据我们的需要配置Nginx,当然在编译时可以选择某些不需要的模块不编译进去,比如精简掉autoindex和SSI模块,命令如下:

./configure --without-http_autoindex_module --without-http_ssi_module
make
make install

当然在编译前可以通过下面的命令查看那些模块是可以开启或者关闭的:

./configure --help | less

2. 修改Nginx服务器名称和版本号

著名的 NETCRAFT网站 可以很轻松的查到你服务器的操作系统和服务程序版本,或者HTTP Response Header也能向我们透露这些信息,很多情况下,这些信息将为黑客进行攻击提供依据,因此我们需要对其进行伪装。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • nginx
  • Web安全
  • Linux
  • vps

配置iptables防火墙维护Linux/VPS服务器安全

也算是最近配置VPS的笔记吧,系统是Debian 5.0。

1. 什么是iptables

摘自 百度百科 :iptables 是与最新的 2.4.x 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

准确的说iptables是IP信息包过滤系统,实际应用可以看作是防火墙,而且配置灵活,功能强大。如果我把Windows平台服务器迁移到Linux上面来的话,这个应该是取代ISA(Internet Security and Acceleration)或者ForeFront TMG的首选。

2. 如何获取iptables

可能有些Linux系统上已经安装了,如果没有安装,请使用下面的命令快速安装:

# Debian Ubuntu 系列使用apt-get
apt-get install iptables
# 或者CentOS Fedora 系列使用yum
yum install iptables

3. 如何使用iptables

3.1 查看规则和清理规则

使用iptables -L查看所有规则,正常情况下应该没有任何规则,如下:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

如果不是这样,建议使用下面的指令清空现有规则,以便于我们下一步操作:

iptables -F
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 网络安全
  • 防火墙
  • iptables

采样分类统计法计算分组票数

文章仅供参考

今天单位要求计票,近100个人,几千张选票,每张选票上有1~12人不等,选票内容有两大类,一类分为同意和不同意,一类分为优秀、称职、比较称职和不称职这几个选项,要求分别算出这些人两大类的选票数。

杯具的是,原始的选票,木有计算机啊,再NB的程序也派不上用场了,只有手工计票了,和同事讨论的几种计票方法,同事给出的意见是:先选择选票上第一个人,然后分别筛出得票最多的选项,比如说,这一堆选票,每张有张三、李四和王五三个人,首先选择张三,大概看了一下,发现张三得同意和优秀的票最多,我们把这些票筛选出来,然后统计不是这两个选项的票,这里只能采用笨方法,依次遍历两大类的各选项。这样发现计票确实容易了一些,因为大多数票已经被筛出了,然后数一下筛出的票数,再合计就得出了张三的所有选项的票数。

下午,同事有事外出,我单独找了一间大的会议室,然后准备计票,突然想到计算机上典型的以空间换时间的算法,也就是说时间快效率高,多数是以牺牲空间为代价的,典型的就是缓存,我们将经常会访问的数据存放在缓存里,这样可以避免多次查询数据库所带来的性能开销,访问的速度就会变快,而这个速度是要牺牲内存或者硬盘空间的;相反,如果空间小,更多地是要消耗性能,导致速度瓶颈的。

那么我又研究了一下刚才同事提出的思路,然后实际计了一组选票,得出以下结论:

1. 全部选择同意和优秀的比较多排第一,这类人多数对投票不感兴趣、不敢得罪人或者是不认识被选举人。

2. 全部选择同意和称职的人数排第二,这类人多数具备有第一条所述的特点,同时思想略有保守,对优秀比较感冒,或者本人要求比较严格,无论看什么都是有缺点的。

3. 全部选择不同意和称职的人数居第三,这类人多数原则上不想被选举人当选,既然不想被选举人当选,那么“优秀”就无从谈起,接下来就是“称职”、“比较称职”和“不称职”三种说法,既然选择不同意,可能觉得被选举人缺乏职务升迁的某种能力,但是对于其工作还是认可的,所以选择称职。

Posted in:
  • 数据结构及算法理论
  • 计算机学习与研究
Tagged
  • 统计
  • 算法

Nginx配置SSL安全证书避免启动输入Enter PEM pass phrase

之前两篇文章已经很好的介绍了Nginx配置SSL的一些情况,配置好的Nginx每次启动都要输两遍PEM pass phrase,很是不爽,尤其是在服务器重启后,Nginx压根就无法自动启动,必须手动启动并输入那麻烦的PEM pass phrase。如何避免Nginx启动出现Enter PEM pass phrase呢?

求助于万能的搜索引擎后,终于得到了解决的方法:

这种情况可能是在设置私钥key时将密码设置写入了key文件,导致Nginx/Apache等系列服务器在启动时要求Enter PEM pass phrase。我们需要做的是剥离这个密码,利用如下OpenSSL命令生成server.key.unsecure文件:

openssl rsa -in server.key -out server.key.unsecure

参考 《Can I skip the PEM pass phrase question when I restart the webserver?》

如果server.key.unsecure生成成功,我们就修改Nginx配置,比如像下面这样:

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • nginx
  • ssl

© Wang Ye / 王 晔. All rights reserved.