能力值:
( LV3,RANK:30 )
2 楼
续:
创建自签名服务器证书:
配置CA后,便可以对证书进行自签名。首先,你可能希望用密码短语加密证书的私钥。加密后,即使证书失窃,也可以有效保护。
使用SSL的应用启动后,必须要输入密码短语后才能使用证书。问题是,如果该服务处于无人监管的情况下,譬如当电脑重启,如果没人输入密码短语,那么web server无法使用。折中方法是:私钥可以被解密,这样服务可以自动启动。
实际生成自签名的证书,使用以下步骤:
生成服务器配置文件~/myCA/exampleserver.cnf,例子如下:
#
# exampleserver.cnf
#
[ req ]
prompt = no
distinguished_name = server_distinguished_name
[ server_distinguished_name ]
commonName = tradeshowhell.com
stateOrProvinceName = NC
countryName = US
emailAddress = root@tradeshowhell.com
organizationName = My Organization Name
organizationalUnitName = Subunit of My Large Organization
注意修改server_disgtinguished_name,common name必须和host name匹配,那么host/certificate不匹配,客户端程序会出错。
配置文件准备好之后,使用如下命令生成服务器证书:
export OPENSSL_CONF =~/myCA/exampleserver.cnf
该命令设置环境变量OPENSSL_CONF,使得openssl更换配置文件。
然后生成证书和密钥:
openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM
同样的,需要输入密码短语。
然后,需要将临时私钥转换为unencrypted key。命令如下:
openssl rsa < tempkey.pem > server_key.pem
需要输入密码短语。
如果希望将key保持为加密状态,直接改名,
mv tempkey.pem server_key.pem。
现在,需要使用CA key对服务器证书签名:
export OPENSSL_CONF=~/myCA/caconfig.cnf
openssl ca -in tempreq.pem -out server_crt.pem
删除临时证书和密码文件。
rm -f tempkey.pem && rm -f tempreq.pem
现在,自签名的服务应用证书和密钥对便产生了:
1. server_crt.pem : 服务应用证书文件
2. server_key.pem : 服务应用密钥文件
阅读应用文档,了解如何在应用中使用证书和密钥。譬如,Configuring Apache for SSL Support.
能力值:
( LV3,RANK:30 )
3 楼
续:
X.509证书转换用户版本PKCS#12
如果需要从服务器的根CA X.509生成用户使用的PKCS#12,使用以下步骤:
下面命令生成包含证书和密钥对的文件:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
然后,下面的命令将该文件生成PKCS#12:
openssl pkcs12 -export -out mycert.pfx -in mycer.pem -name "Certificate for whatever"
会提示输入密码,可以不输。
生成的mycert.pfx文件可以被诸如浏览器、E-mail客户端的应用程序导入,因为这个证书代表了服务器的根CA 证书,所有由该CA证书前面的服务器级证书都会被安装了证书PKCS#12版本的客户应用接受。
生成由公认CA签名的证书
实际使用的譬如运行电子商务的服务器需要由公认的CA如verisign签名的证书。生成并获得CA的签名比较困难。得到签名之前有很多的paperwork,以确保信息的准确性。
如果不需要由密码短语加密的密钥,下面的命令生成私钥和证书请求:
openssl req -new -newkey rsa:1024 -nodes -keyout mykey.pem -out myreq.pem
若已有密钥,则使用以下命令:
openssl req -new -key mykey.pem -out myreq.pem
如果需要验证前面和证书请求中的信息,以下命令验证签名:
openssl req -in myreq.pem -noout -verify -key mykey.pem
信息验证使用如下命令:
openssl req -in myreq.pem -noout -text
其后的步骤一般是在CA申请表格中包含改证书请求的内容,然后等待证书。密钥文件需要好好保管,使用CA签名的证书时会需要它。
用户应用中使用证书
本部分介绍用户角度看如何在SSL链接中使用PKCS#12证书,并演示了在firefox浏览器以及e-mail客户端导入证书的过程。
在应用中导入root根证书,便可以建立与服务器的可信SSL加密的链接,而不会在乎这个证书哪里来的。
在Mozilla Firefox中导入证书:
1. Firefox Edit->preference
2. 点击Advanced
3. 点击View Certificate
4. 点击Import
5. 找到certificate文件所在位置,.pfx文件
6. 选中pfx文件,点击open
7. 可能提示输入firefox的主密码,或者当场生成一个;点击OK
8. 提示输入证书的输出密码,如果没有与证书相关的密码,点击OK;否则输入,点击OK
9. 出现成功信息;
10.点击OK
11. 成功地导入了PKCS#12证书。
在邮件客户端Evolution中导入证书:
1. Eolution点击Edit>preference;
2. 点击证书;
3. 点击import;
4. 找到pfx文件;
5. 选中,打开;
6. 可能提示输入Evolution的证书数据库密码,或者设置初始密码;点击OK
7. 提出输入PKCS12文件的密码,如果没有,点击OK。
8. 在Eolution窗口可以看到证书,以及证书的详细内容;
9. 点击关闭;
10. 成功导入。
在Mozilla雷鸟中导入证书:
1. Thunderbird, 点击Edit-Preference
2. 点击Advanced
3. 点击certificate
4. 点击manage certificates
5. 点击import
6. 找到pfx文件
7. 选中文件,点击open
8. 可能提示输入thunderbird的主密码,或者设置初始密码;点击OK
9. 输入证书的导出密码;点击OK。如果没有,点击OK。
10. 成功信息出现。
11. 点击OK。
12. 成功。
在系统CA数据库中导入证书
在系统可信CA数据库中导入证书后,所有使用该库的应用都能自动使用证书:
1. copy证书到系统证书目录,在terminal输入:
sudo cp mycert.pem /usr/share/ca/certificates/mycert.crt
2. 编辑ca-certificats配置文件/etc/ca-certificates.conf. 将刚才拷贝的文件名加在#之后的第一行,如:
# This file lists certificates that you wish to use or to ignore to be
# installed in /etc/ssl/certs.
# update-ca-certificates(8) will update /etc/ssl/certs by reading this file.
#
# This is autogenerated by dpkg-reconfigure ca-certificates.
# certificates shoule be installed under /usr/share/ca-certificates
# and files with extension '.crt' is recognized as available certs.
#
# line begins with # is comment.
# line begins with ! is certificate filename to be deselected.
#
mycert.crt
brasil.gov.br/brasil.gov.br.crt
cacert.org/cacert.org.crt
mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt
[... many additional certificates omitted ...]
如果不手动,可以使用如下命令:
sudo dpkg-reconfigure ca-certificates
3.更新CA证书数据库
sudo update-ca-certificates
4. 导入成功。
Apache配置SSL可参考Server Guide - HTTPD and Server Guide - Certificates.
其它资源如下:
本地资源:
man config
System manual page for the OpenSSL library configuration files
man gendsa
System manual page for the gendsa DSA private key generator
man genrsa
System manual page for the genrsa RSA private key generator
man openssl
System manual page for the openssl command-line tool
man rand
System manual page for the rand pseudo-random byte generator utility
man x509
System manual page for the x509 certificate display and signing utility
WWW 资源
CACert, a FREE X.509 Certificate Authority
Creating a Certificate Authority (CA)
OpenSSL Certificate Authority Setup
OpenSSL Website
Public Key Infrastructure (X.509) (pkix)
CategorySecurity CategorySecurity CategorySecurity
能力值:
( LV3,RANK:30 )
4 楼
如今密码学中最常用的一种形式就是公钥加密。公钥加密利用密码对:公开密钥和私有密钥。公钥系统的工作原理是使用公开密钥加密,密文只能通过私钥解密。
公钥系统的一个典型应用是SSL和TLS。譬如,Apache使用https,http over ssl,虽然http本身没有提供加密服务,但是https可以实现http流量的加密。
证书用来发布服务器的公钥和其它信息,以及对该证书负责的机构的信息。证书可以由CA签名。CA是验证了证书中包含信息正确性的可信第三方机构。
证书的类型
为了搭建使用公钥系统的安全服务器,在大多数情况下,需要将证书请求(包括公钥),公司分身的证明以及相应的费用提交给CA。CA验证证书请求和身份,发回安全服务器的证书。
或者,可以生成自签名的证书。当然,商业化的服务器是不推荐使用自签名证书的。
以HTTPS为例,CA签名的证书相比自签名的证书有两个好处:
1.浏览器自动验证了证书,并开始安全会话,而不需要用户处理;
2. CA发布的证书可以保证通信服务器的身份;
大多数支持SSL的浏览器和计算机都包含默认承认的CA列表。如果浏览器发现了一个证书的发布方CA不在自己的列表,就需要用户的干预。有的应用会直接报错。
从CA获得证书的过程很简单:
1. 生成公钥/私钥对;
2. 基于公钥生成证书请求,证书请求中包含服务器和公司信息;
3. 发送请求和必要的证明给CA。并按照他们的要求填表。
4. 若CA验证信息无误,会发送证书回来;
5. 将该证书安装到安全服务器上,并进行适当的配置。
生成证书签名请求CSR(Certificate Signing Request)
不论是从CA获得证书还是自签名证书,第一步都是生成密钥。
如果证书用于服务守护进程,例如Apache,Postfix,DoveCot,密钥最好不用密码短语加密。否则,每次启动,都需要输入密码短语。下面介绍生成有密码短语加密的和不用密码短语加密的证书。并用没有加密的密钥生成证书。不用密码短语的好处是方便,但是密钥的丢失导致服务器的沦陷。
使用如下命令生成CSR密钥:
openssl genrsa -des3 -out server.key 1024
提示时,输入密码短语;最好长度为8。使用des3的时候,密码短语长度最短为4个字符,(生成rsa私钥,并用des3加密;为何只生成了私钥呢?),包含数字和/或标点,并且不是字典中的单词。密码短语大小写敏感。
生成不带密码短语的不安全密钥:
openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insure server.key
使用server.key生成CSR:
openssl req -new -key server.key -out server.csr
提示输入密码短语,然后各种公司信息,生成server.csr文件。将该csr提交给CA处理。或者,可以使用该CSR生成自签名的证书。(这一部分内容和实验内容不符~~)
生成自签名的证书
命令:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
安装证书
将server.key和server.crt安装到服务器上:
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
然后只需要配置应用可以使用公钥加密,使用证书和密钥文件。(不明白~~;很明显的是,应用为啥会接受这个证书呢?另外,RSA的公钥在哪里呢?)
Certificate Authority
如果应用需要的不仅仅是自签名的证书,那么需要建立自己内部的CA。
1. 创建存放CA证书和其它文件的目录:
sudo mkdir /etc/ssl/cA
sudo mkdir /etc/ssl/newcerts
(这个也太不低调了,直接就存放在系统文件里~~)
2. CA需要文件来跟踪保存CA使用的序列号,每个证书都有唯一的序列号;以及CA发布的证书;
sudo sh -c "echo '01'>/etc/ssl/CA/serial"
sudo touch /etc/ssl/CA/index.txt
3. CA还需要一个配置文件,虽然不是必须的,但是在生成多个证书的时候会很方便。编辑/etc/ssl/openssl.cnf,在【CA_default】中修改:
dir = /etc/ssl/ # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number
private_key = $dir/private/cakey.pem# The private key
4. 生成自签名的根证书:
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
会要求输入证书的各种信息
5.安装根证书和密钥
sudo mv cakey.pem /etc/ssl/private
sudo mv cacert.pem /etc/ssl/certs
6. 现在可以给证书签名了,首先需要证书签名请求CSR。有了CSR使用如下命令生成CA签名的证书:sudo openssl ca -in server.csr -config /etc/ssl./penssl.cnf
在输入CA密钥的密码之后,会提示证书签名,并commit该新证书。
7. 这时会有新文件/etc/ssl/newcerts/01.pem,包含同样的输出。
8. 拷贝该证书到主机,并进行配置。默认的保存证书的位置是/etc/ssl/certs。这样,多个应用就可以使用这个证书。
(感觉还是不清楚~~)
目前觉得该文档的问题很多,但是有一些基本的概念如index.txt,serial它解释的还是挺清楚的~~
能力值:
( LV3,RANK:30 )
5 楼
Apache是Linux系统上应用最广的web服务器。应用最广的传输网页的协议HTTP,安全协议HTTPS以及FTP在Apache都有支持。
Apache常和MySql,PHP,python和perl结合使用,LAMP(Linux, Apache, MySql,php/python/perl)配置形成了强大而健壮的开发和配置平台。
安装
apache2:
audo apt-get isntall apache2
配置
apache配置通过普通文件中的指令形式实现,这些指令分别位于以下的文件和目录中:
apache2.conf: 是apache2的主配置文件,存放着apache2的全局设置;
conf.d: 文件夹里的配置文件也是全局适用,其它使用apache2的服务可以添加文件或软链接到这个目录;
enwars: 存放apache2的环境变量;
httpd.conf: 之前曾是apache的主配置文件,名字来自与httpd守护进程;可用于用户设置的全局配置;
mods-available: 该目录保存的配置文件加载和使用模块,但并非所有模块都有配置文件;
ports.conf: 指明Apache2的监听端口;
sites-available: Apaches的虚拟主机,使得apache2可以对不同的站点有不同配置;
sites-enabled: 包含/etc/apache2/sites-available的符号链接;/sites-available的配置文件被链接之后,Apache2启动的时候该配置就会处于活动状态。
此外,其他的配置文件可以用Include命令,并且通配符可以包含多个配置文件,对配置文件的修改在apache2重启后起效。
服务器可以使用包含了mime文档类型的文件,文件名字通过TypesConfig指令设置,默认值/etc/mime.types.
基本设置
apache2的默认配置是virtual host友好的,默认有一个virtual host,以VirtualHost指令开始,同时,也可以作为多个virtual host的模板。如果用户不修改,默认的virtual host作为默认站点;可通过修改/etc/apache2/sites-available/default修改默认的virtual host.
对virtual host的配置只影响特定的virtual host。若一个directive全局有效,并且在virtual host的设置中没有设置,那么使用缺省设定。譬如,可以指定webmaster的email地址,而不用指定每个virtual host的mail address.
如果需要配置新的virtual host或地址,拷贝default:
sudo cp /etc/apache2/sites-available/default /etcapache2/sites-available/mynewsite
ServerAdmin项指定管理员的mail地址;默认邮件是webmaster@localhost,修改成自己的邮箱后,若网站出了问题,Apache2会发送错误信息的报告。
Listen项指明Apache监听的port,(IP可选)。如果没指名IP,那么apache2监听机器的所有IP。默认监听端口是80.若配置127.0.0.1:80,那么只监听环回地址,也即在公网不可用。该项在/etc/apache2/ports.conf中可配置。