计算机密钥有助于保护 Forms 身份验证 Cookie 数据和页级视图状态数据。它们还用于验证进程外会话状态标识。ASP.NET 使用以下类型的计算机密钥:
- 验证密钥,用于计算消息验证代码 (MAC) 以确认数据的完整性。此密钥附加到 Forms 身份验证 Cookie 或特定页的视图状态。
- 解密密钥,用于对 Forms 身份验证票证和视图状态进行加密和解密。
(一)生成计算机密钥
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,右键单击"计算机密钥",然后单击"打开功能"。
3. 在"计算机密钥"页上,从"加密方法"下拉列表中选择一种加密方法。默认加密方法为"SHA1"。
4. 从"解密方法"下拉列表中选择一种解密方法。默认解密方法为"自动"。
5. 此外,也可以配置验证密钥和解密密钥的设置。
6. 在"操作"窗格中,单击"生成密钥",然后单击"应用"。
(二)选择计算机密钥加密方法
通过选择良好的计算机密钥加密方法,可以增强你创建的计算机密钥的安全性。
有下列加密方法可供使用:
- 高级加密标准 (AES) 实现起来相对容易一些,并且需要很少的内存。AES 的密钥大小为 128、192 或 256 位。此方法使用相同的私钥对数据进行加密和解密,而公钥方法必须使用成对的密钥。
- Message Digest 5 (MD5) 用于对应用程序(例如邮件)进行数字签名。此方法将产生 128 位的哈希,这是一种压缩格式的原始数据。MD5 可以提供一定的保护,考试,大提示以防止遭受计算机病毒和某些程序(看上去像是无害的应用程序,而实际上具有破坏性)的攻击。这些程序称作特洛伊木马。
- 安全哈希算法 (SHA1) 是默认的'加密方法,它被认为比 MD5 更加安全,因为它产生 160 位的消息摘要。应该尽可能使用 SHA1 加密。
- 三重数据加密标准 (TripleDES) 与数据加密标准 (DES) 稍有不同。它的速度比普通 DES 慢三倍,但是它更加安全,因为它的密钥大小为 192 位。如果性能不是主要考虑的问题,请考虑使用 TripleDES。
具体实现步骤如下:
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页上,从"加密方法"下拉列表中选择一种加密方法。默认加密方法为"SHA1"。
4. 在"操作"窗格中,单击"应用"。
(三)选择计算机密钥解密方法
与加密方法类似,执行如下步骤即可:
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页上,从"解密方法"下拉列表中选择一种解密方法。默认解密方法为"自动"。
4. 在"操作"窗格中,单击"应用"。
(四)在运行时生成验证密钥
如果你希望 ASP.NET 创建随机密钥并将其存储在本地安全机构 (LSA) 中,就需要在运行时生成验证密钥。默认情况下,将在运行时生成验证密钥。此密钥可确保 Forms 身份验证票证不会被篡改且已经加密,并且视图状态也不会被篡改。通过在运行时生成验证密钥,还可以保证服务器在处理数据时能够检测到对视图状态或身份验证票证所做的全部修改,而无论修改是在客户端计算机上进行的,还是通过网络进行的。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"运行时自动生成"复选框,然后在"操作"窗格中单击"应用"。
(五)为每个应用程序生成唯一的验证密钥
当你希望 ASP.NET 创建随机密钥时,可以为每个应用程序生成唯一的验证密钥。本地安全机构 (LSA) 使用每个应用程序的应用程序 ID 来创建此密钥。LSA 然后会将此密钥存储在 Web 服务器上。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"为每个应用程序生成一个唯一密钥"复选框,然后在"操作"窗格中单击"应用"。
(六)在运行时生成解密密钥
如我们希望 ASP.NET 生成随机密钥并将其存储在本地安全机构 (LSA) 中,就需要在运行时生成解密密钥。默认情况下,在运行时生成解密密钥。此密钥可确保 Forms 身份验证票证不会被篡改且已经加密,并且视图状态也不会被篡改。通过在运行时生成解密密钥,还可以保证服务器在处理数据时能够检测到对视图状态或身份验证票证所做的全部修改,而无论修改是在客户端计算机上进行的,还是通过网络进行的。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"解密密钥"下,选中"运行时自动生成"复选框,然后在"操作"窗格中单击"应用"。
(七)为每个应用程序生成唯一的验证密钥
当希望 ASP.NET 创建随机密钥时,可以为每个应用程序生成唯一的验证密钥。本地安全机构 (LSA) 使用每个应用程序的应用程序 ID 来创建此密钥。LSA 然后会将此密钥存储在 Web 服务器上。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"为每个应用程序生成一个唯一密钥"复选框,然后在"操作"窗格中单击"应用"。
(八)为 Web 场生成计算机密钥
若要在 Web 场配置中的多台计算机之间使用 Forms 身份验证,必须手动生成特定的验证和解密密钥值,并在该 Web 场中的所有计算机上使用这些值。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 若要为 Web 场生成特定的验证和解密密钥值,请在"计算机密钥"页上,清除验证密钥和解密密钥的"为每个应用程序生成一个唯一密钥",再清除"运行时自动生成",然后在"操作"窗格中单击"生成密钥"以创建特定的密钥值。
4. 在"操作"窗格中,单击"应用"。
首先:密钥直接明文写在代码里是肯定不可取的!将密钥保存在文件中,如果是服务器端的话,没什么大问题,你也可以直接将密钥写在代码里。不存储密钥,使用随机密钥,每次加密的时候的密钥都不一样,需要考虑的就是解密时怎么取到生成的密钥。可以加一些数据来生成密钥,比如用户名、用户密码什么的。4.使用系统提供的密钥容器,进行存储密钥,现在操作系统这么多,存储容器的使用就自己去查看相关操作系统的文档吧。可以使用电子证书,当然证书你可以存储在操作系统的密钥容器上,或者其它介质中,看你的需要咯。加强密钥,就是使用多种加密算法,把数据多加密几次,把密钥也加密了。这样的话就是涉及到加密密钥的密钥要存储在哪。1. 使用 SSH 访问远程命令行1.1 OpenSSH 简介
1.2 SSH 认证方式
1.3 openSSH 的工作模式
1.4 Secure Shell 示例
1.5 SSH 主机密钥
2. 配置基于 SSH 密钥的身份验证
3. 自定义 SSH 服务配置
4. SSH 安全注意事项
作业
1. 使用 SSH 访问远程命令行
1.1 OpenSSH 简介
OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施。用于在远程系统上安全运行shell。如果您在可提供ssh服务的远程Linux系统中拥有用户帐户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可用于在远程系统中运行命令。
常见的远程登录工具有:
telnet
ssh
dropbear
telnet //远程登录协议,23/TCP
认证明文
数据传输明文
ssh //Secure SHell,应用层协议,22/TCP
通信过程及认证过程是加密的,主机认证
用户认证过程加密
数据传输过程加密
dropbear //嵌入式系统专用的SSH服务器端和客户端工具
1.2 SSH 认证方式
openssh有两种认证方式,分别是:
基于口令认证
基于密钥认证
1.3 openSSH 的工作模式
openSSH是基于C/S架构工作的。
服务器端 //sshd,配置文件在/etc/ssh/sshd_config
客户端 //ssh,配置文件在/etc/ssh/ssh_config
ssh-keygen //密钥生成器
ssh-copy-id //将公钥传输至远程服务器
scp //跨主机安全复制工具
1.4 Secure Shell 示例
//以当前用户身份创建远程交互式shell,然后在结束时使用exit命令返回到之前的shell
[root@localhost ~]# ssh 172.16.12.138
root@172.16.12.138's password:
Last login: Tue Jul 10 07:34:03 2018 from 172.16.12.136
[root@localhost ~]# exit
logout
Connection to 172.16.12.138 closed.
//以其他用户身份(remoteuser)在选定主机(remotehost)上连接到远程`shell`
[root@localhost ~]# ssh user1@172.16.12.138
user1@172.16.12.138's password:
[user1@localhost ~]$ exit
logout
Connection to 172.16.12.138 closed.
//以远程用户身份(remoteuser)在远程主机(remotehost)上通过将输出返回到本地显示器的方式来执行单一命令
[root@localhost ~]# ip a s ens332: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:0e:70:22 brd ff:ff:ff:ff:ff:ff
inet 172.16.12.136/24 brd 172.16.12.255 scope global dynamic ens33
valid_lft 1422sec preferred_lft 1422sec
inet6 fe80::20c:29ff:fe0e:7022/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# ssh user1@172.16.12.138 '/usr/sbin/ip a s ens33'
user1@172.16.12.138's password:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f4:5b:87 brd ff:ff:ff:ff:ff:ff
inet 172.16.12.138/24 brd 172.16.12.255 scope global dynamic ens33
valid_lft 1666sec preferred_lft 1666sec
inet6 fe80::20c:29ff:fef4:5b87/64 scope link
valid_lft forever preferred_lft forever
//w命令可以显示当前登录到计算机的用户列表。这对于显示哪些用户使用ssh从哪些远程位置进行了登录以及执行了何种操作等内容特别有用
[root@localhost ~]# w
07:49:18 up 18 min, 2 users, load average: 0.02, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 172.16.12.1 07:31 6.00s 0.02s 0.00s w
user1 pts/1 172.16.12.136 07:49 5.00s 0.00s 0.00s -bash
1.5 SSH 主机密钥
ssh通过公钥加密的方式保持通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向其发送公钥副本。这可用于为通信渠道设置安全加密,并可验证客户端的服务器。
当用户第一次使用ssh连接到特定服务器时,ssh命令可在用户的~/.ssh/known_hosts文件中存储该服务器的公钥。在此之后每当用户进行连接时,客户端都会通过对比~/.ssh/known_hosts文件中的服务器条目和服务器发送的公钥,确保从服务器获得相同的公钥。如果公钥不匹配,客户端会假定网络通信已遭劫持或服务器已被入侵,并且中断连接。
这意味着,如果服务器的公钥发生更改(由于硬盘出现故障导致公钥丢失,或者出于某些正当理由替换公钥),用户则需要更新其~/.ssh/known_hosts文件并删除旧的条目才能够进行登录。
//主机ID存储在本地客户端系统上的 ~/.ssh/known_hosts 中
[root@localhost ~]# cat ~/.ssh/known_hosts172.16.12.138 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHpBYg+C0GDiBU9mHsy8S3ju31OdfTq6cr6oprIsE/MM8yZdTrRh4gum8IXiVFchUelPD5R9IuTjsy8Eqy8l+Lc=
//主机密钥存储在SSH服务器上的 /etc/ssh/ssh_host_key* 中
[root@localhost ~]# ls /etc/ssh/*key*
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key.pub
2. 配置基于 SSH 密钥的身份验证
用户可通过使用公钥身份验证进行ssh登录身份验证。ssh允许用户使用私钥-公钥方案进行身份验证。这意味着将生成私钥和公钥这两个密钥。私钥文件用作身份验证凭据,像密码一样,必须妥善保管。公钥复制到用户希望登录的系统,用于验证私钥。公钥并不需要保密。拥有公钥的ssh服务器可以发布仅持有您私钥的系统才可解答的问题。因此,可以根据所持有的密钥进行验证。如此一来,就不必在每次访问系统时键入密码,但安全性仍能得到保证。
使用ssh-keygen命令生成密码。将会生成私钥~/.ssh/id_rsa和公钥~/.ssh/id_rsa.pub。
注意:
生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。
生成ssh密钥后,密钥将默认存储在家目录下的.ssh/目录中。私钥和公钥的权限就分别为600和644。.ssh目录权限必须是700。
在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用ssh-copy-id完成这一操作
[root@localhost ~]# ssh-copy-id remoteuser@remotehost
通过ssh-copy-id将密钥复制到另一系统时,它默认复制~/.ssh/id_rsa.pub文件
//SSH密钥演示//使用 ssh-keygen 创建公钥-私钥对
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8VyY3c3UEQvk1Pn95tYIF7sx9enlwG78hDjlX0entN0 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .+.o*|
| +o..*o|
| . o o...=|
| + . . +|
| S o .o+*|
| .=BBB|
| o=*XE|
| .*+B|
| . oo|
+----[SHA256]-----+
//使用 ssh-copy-id 将公钥复制到远程系统上的正确位置
[root@localhost ~]# ls .ssh/
id_rsa id_rsa.pub
[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.12.138
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '172.16.12.138 (172.16.12.138)' can't be established.
ECDSA key fingerprint is SHA256:JK5WwrX8hynl3dyWO43e6+lcs6zn9oZn74z1H5X8F90.
ECDSA key fingerprint is MD5:01:4f:4f:4b:0e:45:a9:10:bb:d0:c0:dd:19:9a:9f:96.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.12.138's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.12.138'"and check to make sure that only the key(s) you wanted were added.
//使用 ssh 命令无命令登录远程主机
[root@localhost ~]# ssh root@172.16.12.138
Last login: Tue Jul 10 18:37:51 2018 from 172.16.12.1
[root@localhost ~]# ip a s ens332: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f4:5b:87 brd ff:ff:ff:ff:ff:ff
inet 172.16.12.138/24 brd 172.16.12.255 scope global dynamic ens33
valid_lft 1377sec preferred_lft 1377sec
inet6 fe80::20c:29ff:fef4:5b87/64 scope link
valid_lft forever preferred_lft forever
//使用 scp 命令传送文件到远程主机
[root@localhost ~]# scp test.sh root@172.16.12.138:/tmp
root@172.16.12.138's password:
test.sh 100% 45 29.8KB/s 00:00
//使用 scp 命令从远程主机上下载文件到本地
[root@localhost ~]# ls
a anaconda-ks.cfg b nginx-1.12.2 nginx-1.12.2.tar.gz nohup.out outfile test.sh
[root@localhost ~]# rm -f test.sh
[root@localhost ~]# ls
a anaconda-ks.cfg b nginx-1.12.2 nginx-1.12.2.tar.gz nohup.out outfile
[root@localhost ~]# scp root@172.16.12.138:/tmp/test.sh .
root@172.16.12.138's password:
test.sh 100% 45 39.1KB/s 00:00
[root@localhost ~]# ls
a anaconda-ks.cfg b nginx-1.12.2 nginx-1.12.2.tar.gz nohup.out outfile test.sh
//scp命令常用选项
-r //递归复制
-p //保持权限
-P //端口
-q //静默模式
-a //全部复制
3. 自定义 SSH 服务配置
虽然OpenSSH服务器通常无需修改,但会提供其他安全措施,可以在配置文件/etc/ssh/sshd_config中修改OpenSSH服务器的各个方面。
PermitRootLogin {yes|no} //是否允许root用户远程登录系统
PermitRootLogin without-password //仅允许root用户基于密钥方式远程登录
PasswordAuthentication {yes|no} //是否启用密码身份验证,默认开启
4. SSH 安全注意事项
密码应该经常换且足够复杂
[root@localhost ~]# tr -dc A-Za-z0-9_ </dev/urandom | head -c 30 |xargs //生成30位的密码
LYH9cbirdT6E_hbColMFjZNf9Kd6If
[root@localhost ~]# openssl rand 20 -base64
Di9ry+dyV40xVvBHirsc3XpBOzg= //生成20位随机密码
使用非默认端口
限制登录客户端地址
仅监听特定的IP地址
禁止管理员直接登录
仅允许有限制用户登录
AllowUsers
AllowGroups
使用基于密钥的认证
禁止使用空密码
禁止使用SSHv1版本
设定空闲会话超时时长
利用防火墙设置ssh访问策略
限制ssh的访问频度和并发在线数
做好日志的备份,经常分析(集中于某台服务器)
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)