自定义Xcode 9服务器证书

4

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服务器服务时,apache.{crt/key}文件以及httpd_os_xcs.conf文件都会被覆盖,因此简单地替换/修改这些文件似乎不是一个选项。

我能想到的唯一办法是实现一些其他的SSL配置,如http_os_xcs.conf文件中建议的那样,但我似乎也无法让它起作用。

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


在进一步的测试中,我发现当前系统可能永远不会允许这种功能。我已向苹果提交了一个类似问题的错误报告(http://www.openradar.me/36835365)。 - richardpiazza
你在Xcode 9.3中有没有看到任何变化?我也一直在尝试设置它,但没有成功。 - Serenade X
@SerenadeX 很遗憾,在 Xcode 9.3 中没有任何变化。我猜想在不久的将来可能不会支持使用自定义证书。我已经放弃了尝试使用这个配置。你具体想要通过你的设置实现什么,也许有一些解决方法我可以帮忙。 - richardpiazza
在我的工作中,网络方面非常重要。我们有一些Mac Mini想要设置这个,并且我们的QA团队可以下载构建版本。但是如果我们尝试使用自签名证书进行访问,它会警告我们该网站存在不安全因素。如果我们不使用iOS设备,则根本无法访问Web服务器(可能是因为我们的网络问题)。 - Serenade X
我知道有两种处理方式。1)让QA团队使用Xcode连接服务器并从集成结果中下载构建(我认为这可能是Apple希望您采取的方向)。2)使用Xcode服务器API构建自定义解决方案,供QA团队查看和下载构建。 - richardpiazza
1个回答

0

以下是我在macOS Mojave(10.14)上的解决方法。

通过Server应用程序安装证书

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

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

我想直接通过系统Apache(即提供https://example.com/xcode页面的内容)使用此证书,但文档不足,我找到的唯一一件事是this migration guide,其中他们谈论mod_secure_transport,应该使用它来代替mod_ssl。 此指南假定已经配置好,但默认的Mojave Apache配置中没有mod_secure_transport(这些位于/ etc / apache2中)。

那么让我们以传统的方式手动进行操作:

手动准备Apache证书文件

  • 将您的证书文件复制到 /etc/apache2/server.crt
  • 在密钥串应用程序中找到您的证书,并从那里以 p12 格式导出您的证书私钥。
  • 将您的私钥转换为 Apache 预期的格式:

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

手动配置Apache

在 /etc/apache2/httpd.conf 文件中:

取消这些行的注释:
LoadModule ssl_module libexec/apache2/mod_ssl.so
...
LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so

找到 "IfModule ssl_module" 部分并添加:
SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"

测试配置:
sudo apachectl configtest

重新启动:
sudo apachectl restart

如果一切正常,它已准备就绪,您可以在 https://example.com/xcode 上观察结果


当从Xcode首选项停止并重新启动Xcode服务时会发生什么?自定义SSL服务是否会继续使用,还是Xcode会覆盖证书?这是我观察到的行为。 - richardpiazza
我没有找到重启按钮。它可以被禁用和启用,但我现在不想打扰它。如果您可以测试并检查,并发布反馈,那就太好了。与Xcode相关的配置在此文件中 - /etc/apache2/other/httpd_xcs.conf,但在此说明中,我只更改了/etc/apache2/httpd.conf。如果该文件被重写,您可能需要备份并在Xcode重新配置后进行恢复。 - battlmonstr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接