Web安全实践实验
一、网站加密过程简介
CA(证书颁发机构)是负责加密网站的重要组成部分。
步骤:
1. CA向浏览器制造商发送公钥。
2. 阿里将公钥提供给CA,随后CA使用其私钥对阿里的公钥进行加密,并将加密后的结果返回给阿里。
当用户使用浏览器访问阿里巴巴的网站时,阿里巴巴会将经过CA私钥加密的自身公钥提供给用户。
4. 用户使用浏览器中的CA公钥对阿里公钥进行解密,如果成功匹配,则信任所访问的网站。
二、使用openssl生产上面所说的四个公钥和私钥
1. 为CA生成公钥和私钥,并创建一个根目录,将所有文件放置在其中。在这里,我们选择了/home/lichking/ssl作为根目录。私钥将存放在private文件夹中,而certs文件夹则用于存放服务器颁发的证书副本。此外,我们还需要创建一个index.txt文件作为证书的数据库,并使用serial文件来记录颁发证书的序号。首先,让我们使用01作为初始序号。
创建一个名为ssl的文件夹。
cd ssl
创建一个名为privatecerts的目录。
chmod 777private
触摸 index.txt
将 echo '01' > serial 改写为更易读的句子:将字符串 01 写入文件 serial。
根据上图所示,接下来请创建一个名为caconfig.conf的CA配置文件,其内容如下(需要修改的部分已用划线标出):
[ ca ]
将default_ca = local_ca改写为更通俗易懂的表达方式,可以使用以下几种方式: 1. 将默认证书机构设置为本地证书机构。 2. 使用本地证书机构作为默认选项。 3. 默认情况下采用本地证书机构。
[ local_ca ]
目录为:/home/lichking/ssl
证书路径 = $dir/cacert.pem
数据库路径为$dir/index.txt
将 new_certs_dir = $dir/certs 改写为: 新的证书目录 = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
将“default_crl_days = 365”改写为: default_crl_days is set to 365.
default_days = 1825 can be rewritten as the value of default_days is set to 1825.
默认的消息摘要算法是SHA-1。
policy equals local_ca_policy.
将x509_extensions = local_ca_extensions改写为更通俗易懂的表达方式,可以这样写:使用本地CA扩展进行x509证书扩展。
将copy_extensions设置为copy
【当地CA政策】
commonName = optional
stateOrProvinceName is optional.
optional - 国家名称(可选)
电子邮件地址:可选填
可选的组织名称:organizationName
organizationalUnitName is optional
[ local_ca_extensions ]
basicConstraints = CA:false Rewritten: The basicConstraints value is set to CA:false.
[ req ]
将“default_bits = 2048”改写为“默认位数为2048”。
默认密钥文件路径为:/home/lichking/ssl/private/cakey.pem
默认的消息摘要算法是SHA-1。
无提示
distinguished_name = root_ca_distinguished_name
将“x509_extensions = root_ca_extensions”改写为“root_ca_extensions = x509_extensions”。
[根证书颁发机构的可分辨名称]
通用名称:MyOwn根证书颁发机构
stateOrProvinceName = NC can be rewritten as the state or province name is NC.
countryName = US can be rewritten as the value of countryName is set to US.
电子邮件地址:[email protected]
organizationName = Trade Show Hell
organizationalUnitName = Information Technology Department
[根证书扩展]
basicConstraints: CA:true
在[local_ca]下,dir是之前创建的文件夹的上级目录,在此处为/home/lichking,如图所示。
请修改default_keyfile为/home/lichking/private/cakey.pem。
使用以下命令生成CA证书:openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 365 -config caconfig.conf。
在系统中,您将被要求输入CA密码。这个密码将在生成服务器证书时使用。我选择了lichking作为我的密码。此后,cakey.pem文件将在私有目录下生成。
2. 生成网站所需的公钥和私钥
首先,生成一个名为server.conf的配置文件。
请将以下内容复制并粘贴到服务器配置文件server.conf中,输入命令gedit server.conf。
[ req ]
无提示
修改后的文案如下:“server_distinguished_name被赋予了distinguished_name的尊贵身份。”
将下面的这段话改写为“req_extensions = v3_req”
[server_distinguished_name ] can be rewritten as: The distinguished name of the server.
常见名称为“localhost”。
stateOrProvinceName=NC can be rewritten as the state or province name is NC.
countryName = US can be rewritten as the value of countryName is set to US.
电子邮件地址:[email protected]
组织名称:我的组织名称
organizationalUnitName= Subunit of My Large Organization
[ v3_req ]
basicConstraints: CA:FALSE可以改写为:basicConstraints with the value of CA set to FALSE.
keyUsage包括nonRepudiation、digitalSignature和keyEncipherment。
将“subjectAltName =@alt_names”改写为更通俗易懂的表达方式: 使用“subjectAltName”来代替“@alt_names”。
[ alt_names ]可以改写为“[ alternative names ]”
DNS.0等于本地主机
DNS.1 =localhost
请使用以下命令输入: openssl req -newkey rsa:1024 -keyout serverkey.pem -keyform PEM -out tempreq.pem -outform PEM -config server.conf
在输入密码时,我不小心输成了123。
3. 利用CA的私钥对第二步所生成的公钥进行加密。
使用以下命令生成服务器证书: openssl ca -in intempreq.pem -out server_crt.pem -config caconfig.conf
tempreq.pem是在第二步生成的公钥,它会被输出为server_crt.pem,这就是需要添加到浏览器中的公钥。输入的密码应该与生成CA时使用的密码相同,即lichking。
修改/etc/apache2/sites-available中default-ssl文件的SSLCertificateFile和SSLCertificateKeyFile,前者是经过CA私钥加密的网站公钥,后者则是网站的私钥。
SSLCertificateFile 的路径是 /home/lichking/ssl/server_crt.pem。
SSLCertificateKeyFile的路径是/home/lichking/ssl/serverkey.pem。
执行以下命令来启动SSL模块:a2enmod ssl 和 a2ensite default-ssl。然后,使用service apache2 restart命令重启服务器。请提供服务器私钥,我输入的是123。
在Firefox浏览器中,点击Edit(编辑)菜单,选择Preferences(首选项),然后进入Advanced(高级)选项卡。在Encryption(加密)下找到View Certificates(查看证书),再点击Authorities(授权机构)。接着,在该页面中导入CA的根证书,即/home/lichking/ssl/cacert.pem文件。
输入以下网址在浏览器中:https://localhost,以完成实验。
三、实验中遇到的问题
这是web安全实践中的首个实验,有些同学刚开始接触Linux,对其并不熟悉,因此可能会遇到许多问题。关于基本操作的问题,在此就不再赘述,下面我将描述我所遇到的两个问题。
在执行service apache2 restart命令后,出现了错误提示job for apache2.service failed...。接着,输入systemctl status apache2.service命令后,显示了以下信息。
问题分析:可能是由于apache2的设置引起的,可以通过输入apache2ctl –t来查看出现的问题。
解决方案:请参考上图,若显示文件路径/etc/ssl/server_crt.pem不存在,可能是之前的第三步操作出现了问题,请重新执行第三步操作。
2. 当您在浏览器中输入https://localhost后,会显示如下界面。
问题分析:经过仔细检查浏览器所提供的错误提示,我们发现了一个serial number不匹配的问题。很可能是由于生成的证书编号重复导致的。
解决方案:您可以尝试以下两种方法来解决问题。一是回到index.txt文件中修改序列号,另一种是重新生成证书。
附录:为初次使用apache2的朋友提供指南
通过使用以下命令安装Apache2:sudo apt-get install apache2
配置文件位于/etc/apache2目录下。
ports.conf是用于监听端口的配置文件。
sites-available是可供使用的站点
创建一个全新的网站:
1. 将apache2.conf文件中的所有内容修改为granted。
2. 打开sites-available文件夹,找到000-default.conf文件,并将其中的DocumentRoot修改为网站所在的文件夹路径。
启用000-default网站的命令是“a2ensite 000-default”。
4. 请执行命令“service apache2 restart”来重新启动Apache服务。
使用Firefox浏览器打开,输入“localhost”即可查看您的网站。
四、实验感想
坦率地说,对于初次接触Linux的人来说,这个实验相当具有挑战性。许多命令都不太容易理解就开始进行实验了。在开始本次实验之前,需要先完成一些准备工作:安装一个虚拟机、安装Ubuntu操作系统以及安装OpenSSL和Apache2软件。
在正式实验之前,我们将进行一次实验,通过这次实验可以深入了解网站密钥的生成过程,并提高对Linux的熟悉程度。我第一次尝试这个实验花了两天时间,反复进行了5、6次,并且还帮助同学们多次完成。就这样,web安全实践课程拉开了帷幕。
还木有评论哦,快来抢沙发吧~