由于服务端设置了https访问,因此如果通过浏览器访问时会提示证书不被信任,但是仍然可以通过处理继续访问.但是在自动化环境中,都是通过命令来请求的,这样不受信任的https就会报错误,这样我们就要像docker服务器一样添加对自签证书的信任.前两部分我们分别在docker推送镜像和拉取镜像时添加了信任证书操作.但是都是基于linux的,在自动化环境中,可能有的节点是windows节点,我们这一节来看下如何在windows环境下添加自签证书信任.
我们先来看一下如果没有添加证书信任的情况下通过命令请求的结果是什么样子的
C:\\Users\\tyler>curl https://192.168.124.43:8443/
curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.
C:\\Users\\tyler>
可以看到,请求失败,提示的错误信息是证书不被信任.
由于我的windows测试机上安装了curl因此会出现curl命令,如果你没有安装则会出现curl不是一个命令的错误.如果不想装curl可以通过powershell来请求,具体操作如下
PS C:\\Users\\tyler> Invoke-WebRequest https://192.168.124.43:8443/
Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure
channel.
At line:1 char:1
+ Invoke-WebRequest https://192.168.124.43:8443/
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc
eption
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
PS C:\\Users\\tyler>
可以看到,没有添加信任通过命令请求就会返回错误.下面我们讲下如何在windows环境下添加自签证书信任
保存证书
首先,打开cmd,cd到一个自已便于记的目录,然后执行命令keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
前面已经说过要执行keytool命令需要正确配置java,如果仍然无法执行,可以从java安装目录里找到
keytool.exe
,以上命令的keytool换成keytoolexe
的完整路径.
- 在cmd里输入mmc命令,这时候会弹出一个界面
如果你看到页面里面的内容没有上面的多,也不用担心,因为这个状态并非初始状态.
- 执行文件-添加/删除管理节点
- 从左边找到\"证书\"然后点击\"添加\"
在以上操作过程中会出现一个选择,默认选择当前用户即可.
以上操作完以后点击确定.然后展开左侧的证书,并执行以下操作
点击导入就会出现一个选择对话框,这时候找到我们刚才保存的nexus.crt文件导入.最后会出现一个警示,这时候选择确定.而不是取消.
这时候,如果关闭主界面的时候会提示是否保存设置,这里取消即可.证书信任已经保存.
这个时候我们再执行curl
或者powershell invoke-webrequest
,即可以年到如下信息
>curl https://192.168.124.43:8443/
<!DOCTYPE html>
<html lang=\"en\">
<head>
<title>Nexus Repository Manager</title>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
<meta name=\"description\" content=\"Nexus Repository Manager\"/>
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"/>
...
由于内容太长,这里就不再输完整的了.