---------【winrm的“四级”安全】---------

四级安全,就是最不安全的。

winrm默认使用http+5985端口,密码传输加密,数据、命令传输明文。
有被人窃取机密,和插入攻击命令的风险,也就是所谓的中间人攻击。不过呢,其实问题不大。
解决的话,启用https版的winrm,或者在http外面套上vpn即可。
强调一遍:win2012r2,win2016,win2019默认开启这种http的5985端口。
 

---------【winrm的“三级”安全】---------

 
三级安全,是指给http套上ssl外衣。
给http套上ssl外衣后,传输内容加密了,连接过程还是需要认证用户名和密码。
这就是我说的【赖法,强制启动,https版的winrm】,也就是说winrm客户端连接winrm服务器使用ssl,但跳过自签名证书,跳过域名绑定,我觉得这样足够了。
 
跳过证书,跳过域名绑定,的赖法,靠这两个法宝。
-SkipCACheck #跳过证书
-SkipCNCheck #跳过服务器,机器名
 

winrm服务器:

#用管理员powershell:

Get-childitem WSMan:\Localhost\listener\
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
$winrm证书 = New-SelfSignedCertificate -CertstoreLocation Cert:\LocalMachine\My -DnsName 'powershell交流群183173532'
Get-childitem WSMan:\Localhost\listener\
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -Force -CertificateThumbPrint $winrm证书.Thumbprint
Get-ChildItem Cert:\LocalMachine\My |Where-Object Thumbprint -eq $winrm证书.Thumbprint |Remove-Item -Force
#防火墙添加5986端口
New-NetFirewallRule -DisplayName "ps传教士winrm的https in" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -RemoteAddress Any -Protocol TCP
 

winrm客户机:

#此命令要求输入,winrm服务器上的账户密码

Invoke-Command -ComputerName $winrm服务器ip -Port 5986 -Credential (Get-Credential) `
-UseSSL -SessionOption (New-PSSessionOption -SkipCACheck -SkipCNCheck) `
-ScriptBlock { dir c:\ }

---------【winrm的“二级”安全】---------

 
二级安全,是指在赖法的基础上。winrm服务器/winrm客户机连接,使用https自签名证书。
 
需要在winrm服务器上,建立一对秘钥,放在【Cert:\LocalMachine\my】里。没错,服务器上必须有公钥+私钥。
winrm客户机上只需要公钥。把公钥导入,放到客户机的【Cert:\LocalMachine\root】里。
 
连接时,winrm客户机用公钥,winrm服务器上用私钥,这一点和ssh相反。winrm客户机公钥泄露问题不大,因为同时还必须要有winrm服务器的账户和密码才能登陆。
 
winrm证书要求:
设置证书增强型密钥使用 (EKU)“服务器身份验证”(OID=1.3.6.1.5.5.7.3.1)。
将“证书主题”设置为“CN=HOSTNAME”。
 
winrm服务器:
#管理员权限powershell,在winrm服务器上,在【证书-本地计算机-》个人-》证书】中,建立证书:
 
$winrm证书参数 = @{
CertStoreLocation = "Cert:\LocalMachine\My"
KeyAlgorithm = 'RSA'
HashAlgorithm = 'sha256'
KeyLength = 4096
Subject = "CN=powershell交流群183173532"
NotBefore = (get-date) - [timespan]::FromDays(365)
NotAfter = (get-date) + [timespan]::FromDays(3650)
} $winrm证书 = New-SelfSignedCertificate @winrm证书参数
#在winrm客户机,只导出证书公钥:
Export-Certificate -Cert $winrm证书 -FilePath 'd:\winrm证书公钥.cer' #让winrm监听6516端口:默认端口=5985(http),不监听5986(https)
Get-childitem WSMan:\Localhost\listener\
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
Get-childitem WSMan:\Localhost\listener\
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -Force -CertificateThumbPrint $winrm证书.Thumbprint 防火墙开启,winrm服务器6516端口:
New-NetFirewallRule -DisplayName "ps传教士winrm的https in" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -RemoteAddress Any -Protocol TCP

winrm客户机:

复制公钥文件'd:\winrm证书公钥.cer',到客户机上。
到winrm客户机上,导入公钥到【受信任证书颁发机构-》证书】:
管理员powershell:
Import-Certificate -Filepath 'd:\winrm证书公钥.cer' -CertStoreLocation "Cert:\LocalMachine\root"
然后从winrm客户机,连接winrm服务器,就不能跳过ca了。
请看代码:
#在winrm客户机上运行:此命令要求输入,winrm服务器上的账户密码
Invoke-Command -ComputerName $winrm服务器ip -Port 5986 -Credential (Get-Credential) `
-UseSSL -SessionOption (New-PSSessionOption -SkipCNCheck) `
-ScriptBlock { dir c:\ }

---------【winrm的“一级”安全】---------

一级安全,是指在二级的基础上,从winrm客户端,校验winrm服务端证书的cn。这里的cn名,类似于域名。它是服务器的计算机名【$env:COMPUTERNAME】
 

winrm服务器:

$winrm证书参数 = @{
CertStoreLocation = "Cert:\LocalMachine\My"
KeyAlgorithm = 'RSA'
HashAlgorithm = 'sha256'
KeyLength = 4096
Subject = "CN=$env:COMPUTERNAME"
NotBefore = (get-date) - [timespan]::FromDays(365)
NotAfter = (get-date) + [timespan]::FromDays(3650)
} $winrm证书 = New-SelfSignedCertificate @winrm证书参数 #在winrm客户机,只导出证书公钥:
Export-Certificate -Cert $winrm证书 -FilePath 'd:\winrm证书公钥.cer' #让winrm监听6516端口:默认端口=5985(http),不监听5986(https)
Get-childitem WSMan:\Localhost\listener\
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
Get-childitem WSMan:\Localhost\listener\
New-Item -Path WSMan:\LocalHost\Listener -Transport HTTPS -Address * -Force -CertificateThumbPrint $winrm证书.Thumbprint #防火墙开启,winrm服务器6516端口:
New-NetFirewallRule -DisplayName "ps传教士winrm的https in" -Name "Windows Remote Management (HTTPS-In)" -Profile Any -LocalPort 5986 -RemoteAddress Any -Protocol TCP

winrm客户机:

复制公钥文件'd:\winrm证书公钥.cer',到客户机上。

到winrm客户机上,导入公钥到【受信任证书颁发机构-》证书】:
管理员powershell:

Import-Certificate -Filepath 'd:\winrm证书公钥.cer' -CertStoreLocation "Cert:\LocalMachine\root"
然后从winrm客户机,连接winrm服务器,就不能跳过ca,也不能跳过cn了。请看代码:
 
$PSRemoting服务器ip = 'DESKTOP-XXXX' #若ping DESKTOP-XXXX返回的ip不对,则要在host中添加ip 计算机名的映射。
$PSRemoting服务器用户名 = 'abcd'
$用户名 = "$PSRemoting服务器ip\$PSRemoting服务器用户名"
$密码明文 = '1234'
$密码密文 = ConvertTo-SecureString $密码明文 -AsPlainText -Force
$用户名和密码捆绑后的授权信息 = New-Object System.Management.Automation.PSCredential ($用户名,$密码密文)
$连接1 = New-PSSession -ComputerName $PSRemoting服务器ip -Port 5986 -Credential $用户名和密码捆绑后的授权信息 -UseSSL
Invoke-Command -session $连接1 -ScriptBlock {dir d:\}

---------【winrm的“最”安全】---------

最安全当然是,不用自签名证书,购买证书了。
或者加入win的域控,成为域内机子。
从win中的powershell,连接到linux版powershell,使用ssh非对称秘钥,也很安全。它是服务器,客户机双向验证。
 

---------【后记】---------

我写这篇帖子的目的是,给winrm启用https。因为winrm+https也可以做ps+web的后端,比如最微软著名的web运维框架“火奴撸撸”。
谢谢观看
 

赖法,强制启动,https版的winrm ---powershell远程连接(winrm)的4个安全级别,详解的更多相关文章

  1. 全网最详细的zkfc启动以后,几秒钟以后自动关闭问题的解决办法(图文详解)

    不多说,直接上干货! 问题详情 情况描述如题所示,zkfc启动以后,几秒钟以后自动关闭. 解决办法: 1.检查下每台机器的时间是否同步: 2.检查下每台机器的防火墙是否关闭: 3.查看zkfc的日志路 ...

  2. 全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)

    不多说,直接上干货! 问题详情 情况描述如题所示,hbase启动以后,HMaster进程启动了,几秒钟以后自动关闭,但是HRegionServer进程正常运行: 解决办法: 1.检查下每台机器的时间是 ...

  3. 配置ORACLE 11g绿色版客户端和PLSQL远程连接环境

    配置ORACLE 11g绿色版客户端和PLSQL环境   本方法是通过使用ORACLE官方提供的精简版客户端,即绿色免安装的客户端.   Instant client的版本很多:主要是Basic和Ba ...

  4. 横版动作MOBA《超宇宙》首测试玩曝光 详解游戏特色(转)

    http://play.163.com/15/0911/11/B37RHHO100314J6L.html

  5. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  6. centos7安装tengine强制使用HTTPS访问

    操作系统:centos7.2 x64tengine:Tengine/2.2.0主机IP: 10.0.0.12 一.安装tengine 1.1 下载源码安装包 1.1.1 源码包pcre-8.40   ...

  7. WebAPi之SelfHost自创建证书启动Https疑难解惑及无法正确返回结果

    前言 话说又来需求了,之前对于在SelfHost中需要嵌套页面并操作为非正常需求,这回来正常需求了,客户端现在加了https,老大过来说WebAPi访问不了了,这是什么情况,我去试了试,还真是这个情况 ...

  8. 2017年iOS应用将强制使用HTTPS安全加密-b

    6月14日,WWDC 2016苹果开发者大会上,苹果在讲解全新的iOS10中提到了数据安全这一方面,并且苹果宣布iOS应用将从2017年1月起启用名为App Transport Security的安全 ...

  9. 禁止将http请求强制转换为https请求

    近期遇到一个问题,在谷歌浏览器里发起的http请求都会被转化为https请求,但在safari里面不会被转化,所以暂时只能用Safari浏览器进行调试,后来还查看了为什么http被强制转化为https ...

随机推荐

  1. Centos 7.5私有域名服务器部署(coredns+etcd)

    单机配置: 一.安装etcd:   1.安装 yum install etcd -y   2.启动 systemctl start etcd   3.设置开机启动 systemctl enable e ...

  2. 【cf961G】G. Partitions(组合意义+第二类斯特林数)

    传送门 题意: 给出\(n\)个元素,每个元素有价值\(w_i\).现在要对这\(n\)个元素进行划分,共划分为\(k\)组.每一组的价值为\(|S|\sum_{i=0}^{|S|}w_i\). 最后 ...

  3. Docker和ASP.NET Core

    Docker和ASP.NET Core Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker ...

  4. Laravel 即时应用的一种实现方式

    即时交互的应用 在现代的 Web 应用中很多场景都需要运用到即时通讯,比如说最常见的支付回调,与三方登录.这些业务场景都基本需要遵循以下流程: 客户端触发相关业务,并产生第三方应用的操作(比如支付) ...

  5. JavaScript中的this绑定丢失及解决方法

    经常犯的错误:混淆了this绑定规则. 代码如下: var obj = { id: 'vexekefo', cool() { console.log(this.id); } }; var id = ' ...

  6. JavaScript---动态加载script和style样式

    一个网页里面的内容理解为一个XML或者说网页本身也就是一个XML文档,XML文档都有很特殊的象征:"标签"也叫"节点". 一个基本的网页格式 <!DOCT ...

  7. 解决element-ui的表格设置固定栏后,边框线消失的bug

    如上图所示,边框线消失了,解决方法如下 添加css代码,如果是修改全局,则到全局样式文件添加 .el-table__row{ td:not(.is-hidden):last-child{ right: ...

  8. Octave中的常用操作2

    >> ones(2:3)ans = 1 1 1 1 1 1 >> 2*ones(2:3)ans = 2 2 2 2 2 2 >> rand(3,3) 产生0~1中的 ...

  9. 记录python上传文件的坑(1)

    import random import string import requests from requests_toolbelt import MultipartEncoder f = '2019 ...

  10. Red Hat 4.4.7-4上安装glances填大大大坑实录,我的内心是崩溃的!!!

    今天的任务是在公司的一台压力测试机上安装一个性能监控工具:glances 因为以前我已经多次安装和使用这个工具,我大意的以为整个过程是这样的: 分分钟搞定完事 然而 我们公司的服务器版本实在是太老了, ...