【问题标题】:Custom Xcode 9 Server Certificate自定义 Xcode 9 服务器证书
【发布时间】:2018-03-06 19:06:46
【问题描述】:

Xcode 9 附带的 Xcode Server 现在会自动生成 SSL 证书,用于服务器和客户端之间的通信。它在与 Xcode Server REST API 通信时也使用此证书。有没有办法指定或替换自动生成的密钥并使用来自受信任的第三方(如 LetsEncrypt)的证书?

apache配置文件位于

/Library/Developer/XcodeServer/Configuration/httpd_os_xcs.conf

包含以下信息:

Listen 443
<VirtualHost *:443>
    # Xcode Server uses its own self-signed certificates
    # only if no other SSL configurations for Apache have been found
    <IfModule !ssl_module>
        LoadModule ssl_module libexec/apache2/mod_ssl.so
        SSLEngine on
        SSLCertificateFile /Library/Developer/XcodeServer/Certificates/apache.crt
        SSLCertificateKeyFile /Library/Developer/XcodeServer/Certificates/apache.key
    </IfModule>
    [...]
    <IfModule mod_proxy.c>
        SSLProxyEngine On
        SSLProxyCheckPeerCN Off

        ProxyPass /xcode/internal/api https://127.0.0.1:20343/api retry=0 timeout=30
        ProxyPassReverse /xcode/internal/api https://127.0.0.1:20343/api
        ProxyPass /xcode/internal/socket.io https://127.0.0.1:20343/socket.io retry=0 timeout=30
        ProxyPassReverse /xcode/internal/socket.io https://127.0.0.1:20343/socket.io
    </IfModule>
    [...]
</VirtualHost>

我相信证书也是 apache.keychain 文件的一部分,位于

/Library/Developer/XcodeServer/Keychains/apache.keychain

但我无法验证。

每次在 Xcode 中启动 Xcode Server 服务时,apache.{crt/key} 文件以及 httpd_os_xcs.conf 文件都会被覆盖,因此简单的替换/修改这些文件似乎不是一个选项。

我能看到的唯一方法是按照 http_os_xcs.conf 文件中的建议实现一些其他 SSL 配置,但我似乎也无法让它工作。

非常感谢任何建议或解决方案。

【问题讨论】:

  • 在进一步测试中,我发现当前系统可能永远不会允许此功能。我已经向苹果提交了一份关于类似问题的错误报告 (openradar.me/36835365)。
  • 你在 Xcode 9.3 中看到过任何变化吗?我也在尝试设置它,但也没有运气
  • @SerenadeX 不幸的是,Xcode 9.3 没有任何变化。我猜想在不久的将来可能不会支持使用自定义证书。我已经不再尝试使用此配置。您具体想通过设置完成什么,也许有一个我可以提供帮助的解决方法。
  • 在我的工作中,他们对网络非常挑剔。我们有一些 Mac Mini 想要设置它,然后我们的 QA 团队可以下载构建。但是,如果我们尝试使用自签名证书去那里,那么它会警告我们该站点的不安全性。如果我们不在 iOS 设备上,那么我们根本无法访问 Web 服务器(可能是因为我们的网络)
  • 我知道有两种方法可以解决这个问题。 1) 让您的 QA 团队使用 Xcode 连接到服务器并从集成结果中下载构建。 (我认为这是苹果可能会让你采取的方向)。 2) 使用 Xcode Server API 为您的 QA 团队构建自定义解决方案,以查看和下载构建。

标签: xcode apache ssl xcode-server


【解决方案1】:

这在 macOS Mojave (10.14) 上对我有用。

通过服务器应用安装证书

  1. 从 App Store 安装“服务器”应用(版本 5.8)
  2. 从服务器应用为您的域生成服务器证书请求
  3. 将请求文件发送给证书提供者以获取证书
  4. 从服务器应用导入证书并将其设置在“使用安全服务”下拉列表中

这些步骤可以通过其他方式完成,但最初我想使用“有福”的 macOS 方式,然后问题就开始了 :)

我想直接通过系统 Apache 使用这个证书(这是服务于 https://example.com/xcode 页面的),但是缺少文档,我发现的唯一的东西是 this migration guide 他们在哪里谈论 mod_secure_transport,应该使用它而不是 mod_ssl。 本指南假定它已配置,但默认 Mojave Apache 配置(位于 /etc/apache2 中)中不存在 mod_secure_transport。

所以让我们以老式的方式手动完成:

手动准备 Apache 证书文件

  1. 将您的证书文件复制到 /etc/apache2/server.crt
  2. 在 Keychain 应用中找到您的证书,并从那里以 p12 格式导出您的证书私钥。
  3. 将您的私钥转换为 Apache 期望的格式:

    openssl pkcs12 -in exported_private_key.p12 -nodes -out server.key -nocerts
    
  4. 将 server.key 复制到 /etc/apache2/server.key

手动配置 Apache

在 /etc/apache2/httpd.conf 中:

  1. 取消注释这些行:

    LoadModule ssl_module libexec/apache2/mod_ssl.so
    ...
    LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
    
  2. 找到“IfModule ssl_module”部分并添加:

    SSLCertificateFile "/private/etc/apache2/server.crt"
    SSLCertificateKeyFile "/private/etc/apache2/server.key"
    
  3. 测试配置:

    sudo apachectl configtest
    
  4. 重启:

    sudo apachectl restart
    

如果一切顺利,就准备好了,你可以在https://example.com/xcode观察结果

【讨论】:

  • 当 Xcode 服务停止并从 Xcode 首选项重新启动时会发生什么?是否继续使用自定义 SSL 服务,还是 Xcode 会覆盖证书? (这是我观察到的行为)。
  • 我没有找到重启按钮。可以禁用和启用它,但我现在不想破坏它。如果您可以测试和检查并发布反馈,那就太好了。 Xcode 相关的配置在这个文件中 - /etc/apache2/other/httpd_xcs.conf ,但在这个指令中我只更改 /etc/apache2/httpd.conf 。如果该文件被重写,您可能会备份它,并在 Xcode 重新配置后恢复?
猜你喜欢
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2010-12-06
  • 2021-06-26
  • 2015-05-24
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多