新搭建好的 GitHub Enterprise 环境使用内置的身份验证,但是往往我们并不想再在企业内部维护一套用户,这个时候我们就考虑可以和 AD 进行集成。GHE可以和 ADFS进行集成,所以本次演练内容是ADFS服务。中间还会用到 ADCS 服务来做证书。
关于ADFS的介绍可以看微软的官网:https://docs.microsoft.com/zh-cn/windows-server/identity/ad-fs/ad-fs-overview
关于ADCS的介绍可以看微软的官网:
创建AD服务器
在Azure创建一台虚拟机。因为是演练,所以用新的 AD 服务器来集成。
因为最近公司安全策略,不允许直接使用3389登录远程桌面,所以先配置一下堡垒机,使用 defaults 就可以了。
从堡垒机登陆远程桌面,并安装 AD 服务
配置 AD 服务,创建一个新的林
重启后创建一个新的 GHE Admin Group 和 两个新的用户,其中一个加入到 GHE Admin Group 中作为以后的 GHE 管理员。这里默认所有 AD 用户都可以访问GHE。
安装ADFS服务器和ADCS服务
因为演练,所以就直接在 AD 服务器上安装 ADFS 和 ADCS了,ADCS一会儿用于制作证书。
配置证书服务
在IIS中创建一个申请,申请用于 ADFS 的证书
通过WBE页面提交申请
提交后将生成的 cer 文件导入到 IIS 完成申请
导出成 pfx 文件备用
开始配置 ADFS 服务,使用刚才创建的 pfx 文件
在 DNS 中添加 ADFS 的解析
访问 https://adfs.ghe.com/FederationMetadata/2007-06/FederationMetadata.xml 这个地址,可以下载到 FederationMetadata.xml 文件
为 GHE 配置域名和证书
再创建一个用于 GHE的 证书, 演练的话试试通配符证书。
配置 DNS 解析
这里需要配置一下DNS服务,因为我们并不是在公网做的解析
进入 GHE 控制台 https://xx.xx.xx.xx:8443/setup/settings 先配置一下 SSH 连接,首先生成 SSH key
ssh-keygen -t rsa -C "admin@ghe.com"
打开生成的位置,用记事本打开id_rsa.pub文件,复制到 GitHub 控制台中
保存设置,等待很久很久,然后完成配置。然后导出 ADCS 的 CA 证书
certutil -ca.cert rootCA.cer
通过 SSH 连接 GHE 服务,并安装 CA 证书。否则刚才颁发的证书没有办法使用。这里需要转换格式,把 cer 文件转成 crt 格式。
openssl x509 -inform DER -in rootCA.cer -out rootCA.crt
使用 ghe-ssl-ca-certificate-install 命令安装 CA 证书
$ scp -P 122 rootCA.crt admin@HOSTNAME:/home/admin
$ ssh -p 122 admin@HOSTNAME
$ ghe-ssl-ca-certificate-install -c rootCA.crt
接下来需要配置域名。这里需要处理一下 pfx 文件,这里需要转成 pem + key。
We can extract the private key form a PFX to a PEM file with this command:
# openssl pkcs12 -in filename.pfx -nocerts -out key.pem
Exporting the certificate only:
# openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
Removing the password from the extracted private key:
# openssl rsa -in key.pem -out server.key
上传证书
保存设置,经过很久很久以后保存成功。
为 GHE 配置 SAML 认证
在 GHE 控制台选择使用SAML认证方式后,配置 sign-on URL 和 Issuer。
接下来从之前保存的 FederationMetadata.xml 文件里 copy 出证书。可以使用下面的网站格式化证书
https://www.samltool.com/format_x509cert.php
保存成文件,然后上传。我这里用了cer的后缀名并不是必须的。但必须 X.509 cert with header
保存配置,等待很久很久。完成保存后打开 https://devops.ghe.com/saml/metadata 这个地址,可以看到一个 xml 文件,保存到本地备用
打开 ADFS 管理工具,添加 relying party trust ,这个用到刚才保存的 metadata.xml 文件
然后配置 Claim Rule
映射规则如下
再添加一条规则来映射 admin 属性,这样可以在 AD 中维护 GHE 的管理员
访问 GHE 站点,调整到 ADFS 登录。但是登录报错
这里检查返回的数据没有问题,最后尝试了很多次,修改了配置如下,我怀疑这是一个BUG。
对应的 ADFS 那边也做了调整
经过漫长的保存后测试成功登录
切换在admin组的用户登录尝试