企业级微服务构建-01搭建和使用Maven私有仓库(Nexus)-15配置SSL

亲历的企业级微服务的完整构建过程-系列文章目录

本人参与了这次的企业级微服务的完整构建,想要记录下来以便以后复习,同时也想分享给小伙伴们,抛砖引玉,欢迎大家提出自己的意见和建议,大家一起探讨一起成长。以下为该系列所有文章的链接:

  1. 搭建和使用Maven私有仓库(Nexus)(更新中。。。)
  2. API网关(待发布)
  3. 认证中心(待发布)
  4. Redis框架(待发布)
  5. RabbitMQ(待发布)
  6. MyBatis(待发布)
  7. Web模块(待发布)
  8. 低代码(待发布)
  9. Core
    1. JSON工具类(待发布)
    2. 日期工具类(待发布)
    3. String工具类(待发布)
    4. Number工具类(待发布)
    5. Spring操作工具类(待发布)
    6. API结构统一封装(待发布)
  10. 监控和告警(待发布)
  11. MongoDB(待发布)

搭建和使用Maven私有仓库(Nexus)-系列文章目录

说明:

  • 以下部分模块,绝大多数人,在日常工作中都是用不到的,所以我就没有介绍,毕竟时间是最重要的成本,没必要花大量时间在我们用不到的内容上。
  • 下面的“1 通用”章节,系列文章中的每一篇内容都相同,介绍一些背景、约定和官网链接等,大家只要知道这些内容了,就不用每篇文章都去看了。
  1. 安装步骤
  2. 登录和界面
  3. 备份和恢复
  4. 管理:讲述了Nexus的管理功能,包括用户管理、权限管理、任务管理等
    1. 管理菜单
    2. 仓库管理
    3. 格式(Formats)(暂时用不到,略)
    4. 分期(Staging)(暂时用不到,略)
    5. 标记(Tagging)(暂时用不到,略)
    6. Maven和Jenkins插件(暂时用不到,略)
    7. 任务(Tasks)
    8. 访问控制
      1. 领域(Realms)管理
      2. 权限(Privileges)管理
      3. 角色(Roles)管理
      4. 用户(Users)管理
      5. 默认角色(Default Role)管理
      6. 内容选择器(Content Selectors)管理
    9. 用户认证(暂时用不到,略)
    10. 能力(Capabilities)(暂时用不到,略)
    11. 节点(Nodes)
    12. 配置SSL
    13. HTTP和HTTPS请求和代理设置(暂时用不到,略)
    14. 电子邮件服务器配置
    15. 重试限制配置(暂时用不到,略)
    16. 审计
    17. 安装和更新许可证
    18. 支持功能
  5. 使用Nexus仓库:讲述了使用(而非管理) Nexus Repository 的方方面面的知识
    1. 仓库管理器概念:使用 Nexus 需要先理解一些概念,该节内容提供了必要的背景和知识
      1. 组件、仓库和仓库格式(暂时用不到,略)
      2. 一个示例 - Maven 仓库格式(暂时用不到,略)
      3. 管理仓库(暂时用不到,略)
      4. 软件供应链自动化(暂时用不到,略)
      5. 代理仓库概念(暂时用不到,略)
    2. 用户界面概述
    3. 搜索组件(暂时用不到,略)
    4. 浏览仓库和仓库组
    5. 管理当前登录用户的资料
    6. 上传组件
    7. 查看标签(仅可用于Pro版本,略)
  6. 集成(主要讲述了如何使用 APIs 和 集成外部工具)(暂时用不到,略)
  7. Maven中配置和使用Nexus


正文

1 通用

1.1 前言

在构建微服务之前,需要先做一些准备工作,比如Maven私有仓库的管理。因为有些微服务模块是作为公共组件被其他微服务引用的,这些公共的微服务,就要设置为依赖,并用Maven仓库管理起来,将自定义的依赖上传到Maven中央仓库并不是一个明智的选择。原因有3个:

  1. 最重要的是隐私和安全问题,我们不可能把企业内部开发的组件上传到公共网络,让所有人能够随便下载;
  2. 上传很麻烦,上传方法详见 https://blog.csdn.net/agonie201218/article/details/124800163
  3. 可能不允许上外网,则无法上传;
  4. 可能会有网络延迟、上传缓慢的问题。
  5. 降低了中央仓库的负担。

综上,我们最好是搭建自己的私有Maven仓库,而当前最流行的就是 Sonatype Nexus Repository Manager,以下简称 Nexus

1.2 约定

  1. 我使用的版本是 OSS 3.40.1-01,整个系列的文章都是在该版本上展开介绍,你们可能使用的是 Pro 版,少数模块是我的 OSS 版上没有的。不过一般使用的话,OSS 版已经够用了
  2. 文中出现的 Repository ,中文称之为“仓库”
  3. 文中出现的变量 $install-dir,值为 /opt/sonatype/nexus
  4. 文中出现的变量 $data-dir,值为 /opt/sonatype/sonatype-work/nexus3 ,或 /nexus-data,两者都是在docker容器nexus中的路径,一个是软链接,一个是实际路径
  5. 文中出现的变量 ${jetty.etc},值为 /opt/sonatype/nexus/etc/jetty
  6. NXRM:Nexus Repository Manager,即 Nexus 仓库管理器
  7. RBAC:Role-Based Access Control,即 基于角色的访问控制

1.3 官方文档

提供Nexus的官方文档:https://help.sonatype.com/repomanager3/
官方文档包含了系统要求、搭建方法,以及各种操作方法等,内容已经非常全面了。

2 配置SSL

SSL:Secure Socket Layer,即 安全套接层。
使用SSL通讯,是一个重要的安全功能以及推荐的最佳实践。安全通讯分为入站和出站。

出站客户端通讯可以包括:

  • 通过 HTTPS 的远程代理仓库,记录在 Repository Management
  • SSL/TLS 安全服务器。eg. SMTP/email 整合,记录在 Email Server
  • 配置为使用 LDAPS 的 LDAP 服务器
  • 专业的认证域,如 Crowd

入站客户端通讯包括:

  • 网络浏览器的对用户界面的HTTPS访问
  • 对于仓库内容的工具访问
  • 对于 REST APIs 的手动使用或脚本方式使用

我暂时只介绍我目前感兴趣的、需要使用的内容:入站SSL - 通过 HTTPS 方式操作内容。

2.1 入站SSL - 通过 HTTPS 方式操作内容

其实就是通过 HTTPS 的方式访问 Nexus。
目前Nexus的访问网址是:http://localhost:8081/
现在,我们要将其改为 https://localhost:8081/

有2种方式:

  1. 在 Nexus 前面使用一个单独的反向代理服务器,来管理 HTTPS
    一个通用的方法事通过一个专门的服务器来访问 Nexus,该服务器代表 Nexus 应答 HTTPS 请求。这些专门的服务器,被称为 反向代理,或 SSL/TLS 终结者。随后的请求都通过 HTTP 方式被转发到 Nexus,然后反向代理服务器接收 Nexus 的 HTTP 响应,最后将该 HTTP 响应以 HTTPS 的方式发回给请求者。
    使用这种方式有一些优势。例如,可以升级/安装 Nexus 而不需要一个自定义的 JVM keystore。反向代理可能已经为网络中的其他系统准备好了。常见的反向代理是 Apache httpd, nginx, Eclipse Jetty,甚至是专业的硬件装置。他们都可被配置,用于操作 SSL 内容,网上也有大量的参考学习材料。

  2. 配置 Nexus 本身,来直接操作 HTTPS/SSL

    第二种方法是使用 Eclipse Jetty 实例,Jetty 被分发给 Nexus 用来接收 HTTPS 连接。

    A. 如何启用 HTTPS 连接器:

    1. 在路径 $data-dir/etc/ssl/ 下创建一个 Java keystore 文件 keystore.jks,该文件包含了 Jetty SSL 证书。
      相关说明文档(两者参考其中一个即可):Eclipse Jetty 9 documentationSSL Certificate Guide

      如果你的服务器证书需要 SNI,并且你的 NXRM 版本是 3.26.0 或以上,则遵循该说明文档:Using a Server Certificate that Requires SNI

    2. 编辑 $data-dir/etc/nexus.properties ,做以下修改然后保存:

      1. 增加新的一行:application-port-ssl=8443
        其中,8443是端口号,用于暴露 HTTPS 连接器,你也可以改为自己设定的其他端口。注意,不要设置为其他连接器或进程在用的端口。

      2. 去掉包含了 nexus-args 的这一行的注释,只要去掉开头的 # 和 空格。修改逗号分隔的 nexus-args 属性值,让它包含 ${jetty.etc}/jetty-https.xml
        去掉注释字符 #,添加 ${jetty.etc}/jetty-https.xml 到当前值的示例编辑行:
        nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml

      3. (可选) 如果你不希望暴露纯文本 http 连接器,可以移除 nexus-args 值中的 ${jetty.etc}/jetty-http.xml 部分。

      4. 增加新的一行:ssl.etc=${karaf.data}/etc/ssl

    3. 编辑 $install-dir/etc/jetty/jetty-https.xml
      a. 设置合适的 keystore 密码。确保所有的3个密码相同 (必需) 。但如果你使用 password 作为 keystore,以及 PrivateKeyEntry密码,则这一步不是必需的。
      b. (推荐) 在某一行(该行包含 <Set name="KeyStorePath">)之前增加新的一行,该行包含你的 keystore 文件 PrivateKeyEntry 的别名。例如,你的 PrivateKeyEntry 的名字为 jetty,那么添加的新行类似于: <Set name="certAlias">jetty</Set>

    4. 重启 Nexus。验证可以建立 HTTPS 连接。如果 NXRM 成功启动了,但是你接收到一个到安全端口的错误连接,那可以参考:Troubleshooting Eclipse Jetty SSL Certificates

    5. 更新 Base URL,在 Nexus 配置的 Base URL 能力配置中,使用 https


    B. 如何禁用 HTTP 连接器:

    1. 编辑 $data-dir/etc/nexus.properties,修改 nexus-args 属性值(逗号分隔),去掉 ${jetty.etc}/jetty-http.xml,然后保存。
    2. 重启 Nexus,验证纯文本 HTTP 请求是否失效。

    C. 使用需要 SNI 的服务器证书:
    如果被 ${jetty.etc}/jetty-https.xml 引用的 keystore文件符合以下条件:
    (NXRM 3.26.0或以上),并且(keystore 在同一个主机中包含多于1个的服务器证书,或者 选择的服务器证书需要 SNI(即,有多个域名或使用域名通配符))
    则为了 NXRM 的启动,需要一些自定义配置,修改这个文件 ${jetty.etc}/jetty-https.xml
    修改这一行:<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
    改为:<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
配置Maven私有仓库,可以使用Sonatype Nexus 3作为Maven仓库管理器。 以下是配置Nexus 3作为Maven私有仓库的步骤: 1. 安装Nexus 3 可以从Sonatype官网下载Nexus 3,然后按照说明进行安装和配置。 2. 创建Maven仓库Nexus 3中创建Maven仓库,可以通过以下步骤完成: - 登录到Nexus 3的Web界面,并进入“Repositories”页面。 - 点击“Create Repository”按钮,并选择“Maven(hosted)”类型。 - 输入仓库的名称和URL,并选择存储位置等配置信息。 - 点击“Create Repository”按钮,完成仓库创建。 3. 配置MavenMaven的settings.xml文件中配置Nexus 3作为私有仓库,可以通过以下步骤完成: - 打开Maven的settings.xml文件,一般位于${user.home}/.m2/目录下。 - 在<settings>标签内添加如下配置: ``` <mirrors> <mirror> <id>nexus</id> <mirrorOf>*</mirrorOf> <url>http://nexus3.example.com/repository/maven-releases/</url> </mirror> </mirrors> ``` 其中,nexus3.example.com/repository/maven-releases/是Nexus 3仓库的URL。 4. 发布和使用Maven包 在使用Nexus 3作为Maven私有仓库时,可以通过以下步骤发布和使用Maven包: - 在项目的pom.xml文件中配置Nexus 3仓库的URL等信息。 - 使用Maven命令发布项目的Maven包到Nexus 3仓库中。 - 在其他项目的pom.xml文件中添加Nexus 3仓库的URL,然后使用Maven命令从Nexus 3仓库中获取依赖。 以上是配置Nexus 3作为Maven私有仓库的基本步骤,具体操作可以根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值