从pfx文件得到crt以及key文件

IIS一般使用pfx文件,而apache却使用的是crt+key文件,有时候客户只给pfx文件,这个时候,就要直接进行转换了

以下操作如pfx文件没有设置密码,请直接敲回画
从pfx文件得到key文件:

openssl pks12 -in site.pfx -nocerts -nodes -out site.key

从pfx文件得到crt文件

openssl pkcs12 -in site.pfx -clcerts -nokeys -out site.crt

disconnect: No valid license available.

最近用rdesktop连接远程windows,总是会在出现桌面后有这个提示:

disconnect: No valid license available.

然后桌面就自动关掉。

搜索了一下,原来是由于terminal server 的问题,只要将terminal server 关掉,并启用普通的远程桌面,就可以解决这个问题。只是windows我不太熟悉,手里面又没有实验机器,只好另外想办法。

到最后,总算找到了,在使用rdesktop时加上一个-n参数,像我这样

rdesktop -n newsession 192.168.0.123

newsession为你要使用的新的client name。

参考资料:
http://ubuntuforums.org/showthread.php?t=707537

如何为自己的网站生成SSL证书

1. 首先保证安装了Openssl,并且能够在在终端执行它。
2. 为你的Apache(三倍-DES加密,PEM格式) 创建一个RSA私钥。

$   openssl   genrsa   -des3   -out   server.key   1024

请将你的server.key文件备份,并且记住你输入得进入密码。能够通过以下的命令察看该文件:

$   openssl   rsa   -noout   -text   -in   server.key

你也可以通过以下的命令创建一个没有加密的版本(不建议):

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

3. 通过RSA私钥文件来创建一个证书请求文件(PEM格式,CSR)

$   openssl   req   -new   -key   server.key   -out   server.csr

同样,你需要做一个备份,同时,在Openssl命令行提示输入CommonName的过程中,你必须输入一个FQDN(一个完全的有资格的域名),一个站点生成了一个CSR请求文件。可以通过以下的命令来查看CSR的详细内容:

$   openssl   req   -noout   -text   -in   server.csr

4. 现在,你已经有了一个证书请求文件(CSR)了,你可以将此文件发送给一个认证机构来进行认证,当然会等一段时间并且花上一些钱。或者通过自己的CA认证机构来进行认证。
§ Verisign
http://digitalid.verisign.com/server/apacheNotice.htm
§ Thawte Consulting
http://www.thawte.com/certs/server/request.html
§ CertiSign Certificadora Digital Ltda.
http://www.certisign.com.br
§ IKS GmbH
http://www.iks-jena.de/produkte/ca/
§ Uptime Commerce Ltd.
http://www.uptimecommerce.com
§ BelSign NV/SA
http://www.belsign.be
通过以下的命令来察看经过认证的证书信息。

$   openssl   x509   -noout   -text   -in   server.crt

5. 现在,我们有了两个文件,server.key和server.crt ,下面就是在Apache中的httpd.conf文件配置:

SSLCertificateFile         /path/to/this/server.crt 
  SSLCertificateKeyFile   /path/to/this/server.key

请求文件不再需要了。
· 使用自认证机构:
最简单的就是通过CA.pl或者是通过CA.sh来对请求文件签名。
1. 为你的CA创建一个RSA私钥(三DES加密并且是PEM格式):

$   openssl   genrsa   -des3   -out   ca.key   1024

备份并且记住你输入的访问密码。通过以下的命令可以查看私钥的详细信息:

$   openssl   rsa   -noout   -text   -in   ca.key

你也可以创建一个非加密的PEM格式的私钥:

$   openssl   rsa   -in   ca.key   -out   ca.key.unsecure

2. 创建一个自签名的证书文件(X.509 结构,输出为PEM格式):

$   openssl   req   -new   -x509   -days   365   -key   ca.key   -out   ca.crt

通过以下的命令查询:

$   openssl   x509   -noout   -text   -in   ca.crt

3. 准备一个脚本文件来对请求文件签名,Openssl不允许简单的通过openssl ca来对请求文件签名。所以一个名为sign.sh的脚本文件(mod_ssl的子目录pkg.contrib下),是用这个来进行签名,不过还是建议使用下面的方法进行签名。

4. 现在可以用这个脚本来进行签名了(刚才生成的CA的私钥和证书必须在这个脚本的目录下):

$   ./sign.sh   server.csr

得到一个证书文件—〉server.crt.
· 怎样更改我的私钥的 pass-phrase 密码?
只需要简单的读取它并重新写入,同时指定它的pass-phrase ,通过以下的命令完成:

$   openssl   rsa   -des3   -in   server.key   -out   server.key.new 
  $   mv   server.key.new   server.key

这时,你被要求两次来输入一个PEM 的pass-phrase,第一次要求输入旧密码,第二次要求输入新密码。
· 怎样可以消除Apache启动的时候的密码(pass-phrase)提示对话框:
原因是保存在你的私钥文件中的RSA私钥是一个一加密格式保存的。密码是保证能够读取这个密钥文件,如果保证你的服务器足够的安全的话,可以通过以下的命令消除:
1. 从RSA私钥中移除密码(同时保留源文件):

$   cp   server.key   server.key.org 
  $   openssl   rsa   -in   server.key.org   -out   server.key

2. 保证私钥只能被root用户读取:

$   chmod   400   server.key

现在这是一个没有没有加密的密钥拷贝。在使用这个密钥文件的时候,将不会再提示你输入密码,然而,如果其他任何人的到这个私钥文件,他都可以在网络上模仿你。所以一定要保证这个密钥文件只能被root用户读取。
· 怎么验证私钥文件和我的证书文件是匹配的?
私钥文件包括一系列的数字。这些数字中的两个是“来自“公钥文件的,其他的是私钥的一部分。公钥的一些bit值被嵌入到你的证书中(我们可以从证书CSR中得到),通过以下的命令来查看输出的数字,同时比较这些数字:

$   openssl   x509   -noout   -text   -in   server.crt 
  $   openssl   rsa   -noout   -text   -in   server.key

他们必须一致,因为它们都是很长的串,所以可以通过下面的方法来查看:

$   openssl   x509   -noout   -modulus   -in   server.crt   |   openssl   md5 
  $   openssl   rsa   -noout   -modulus   -in   server.key   |   openssl   md5

这时比较两个短的数字串

$   openssl   req   -noout   -modulus   -in   server.csr   |   openssl   md5

使用SSH证书(不要密码)登陆远程服务器

参考:http://www.simplehelp.net/2008/12/17/how-to-ssh-to-your-remote-server-without-entering-a-password-every-time/

由于工作关系,我经常需要在非常不同的Linux服务器上转上转去,原来每次登陆,系统都会提示你输入密码,这的确是一件很烦的事情,特别是你在需要对好几台机器工作的时候。后来,我学会了用SSH证书认证来取代普通的密码认证,这样子我就不用每次都输入密码了。OpenSSH允许远程执行命令,如果再加上证书使用,那就我就可以运行一些远程控制的脚本去控制许多许多机器,这个对我的工作非常有用。比如说,在需要在100台机器上添加许多相同的用户。。。

闲话少说,下面我们正式来创建证书:
首先,我们要给远程服务器创建一个公钥(public key)。在你的Linux系统上打开一个命令终端,运行如下命令:

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/calvin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/calvin/.ssh/id_rsa.
Your public key has been saved in /home/calvin/.ssh/id_rsa.pub.

在这一步里,系统将自动生成一个公钥(public key)并保存在/home/calvin/.ssh/id_rsa/.pub这个文件里面。在上面的命令执行过程中,我们只需要一直敲回车直接使用默认值就好了(如果你想具体了解,可以去看man page,也可以私下跟我讨论)。

接下来,我们要将这个公钥(public key)复制到远程机器上面去,以前这是一个比较麻烦的事,但是,现在我们只要一个命令就可以搞定:

# ssh-copy-id -i /home/calvin/.ssh/id_rsa.pub username@@remoteserver.com

用自己实际的用户名与服务器地址取代username和remoteserver.com(下同)。
在这里,你可以再试下ssh到远程服务器,应该是不会再提示要密码而直接登陆进去了。

当然,如果你的机器没有ssh-copy-id这个命令,我们也可以使用传统的方法:

# scp ~/.ssh/id_rsa.pub username@remoteserver.com:/home/username

然后,登陆到远程机器上进行下一步的操作:

# ssh username@remoteserver.com
# cat ~/id_rsa.pub >> ~/.ssh/authorized_keys2

接下来,我们要给~/.ssh/authorized_keys2 correctly这个文件设置正确的权限(权限不对,证书会被拒绝)

# chmod 644 ~/.ssh/authorized_keys2