自定义Xcode 9服务器证书

时间:2017-09-25 18:07:12

标签: xcode apache ssl xcode-server

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配置,但我似乎无法使其工作。

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

1 个答案:

答案 0 :(得分:0)

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

通过服务器应用安装证书

  1. 从App Store(版本5.8)安装“服务器”应用
  2. 从您的域的“服务器”应用生成服务器证书请求
  3. 将请求文件发送到证书提供者以获得证书
  4. 从Server应用程序导入证书,并将其设置在“使用以下方法保护服务”下拉列表中

这些步骤可以通过其他方式完成,但是最初我想使用“祝福”的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. 在“钥匙串”应用中找到证书,然后从那里以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

观察结果