GITLAB中如何使用自签名的SSL证书

我搭建了一个gitlab,平时自己开发的一些小项目,会放到这上面。 想走https访问gitlab,这样安全一点,因为只有自己用,所以就没有必要去专门买个SSL证书,而是使用自签名的证书。配置步骤记录如下:

  1. 生成CA私钥ca.key

     openssl genrsa -out ca.key 2048
    
  2. 准备一个配置文件openssl_ca.conf,内容如下,req_distinguished_name中各个字段的取值根据实际情况进行修改。这个文件并不是必须的,如果没有这个文件,后一个步骤命令中不要带上-config openssl_ca.conf参数就行,那样命令执行时会提示让你输入一些组织信息。

     RANDFILE               = $ENV::HOME/.rnd
    
     [ req ]
     string_mask = utf8only
     utf8        = yes
     default_bits           = 2048
     default_keyfile        = ca.key
     distinguished_name     = req_distinguished_name
     prompt                 = no
    
     [ req_distinguished_name ]
     C                      = CN
     ST                     = Beijing
     L                      = Beijing
     O                      = XXX Inc.
     OU                     = IT Dept.
     CN                     = Custom CA
    
  3. 生成CA根证书ca.crt

     openssl req -config openssl_ca.conf -new -x509 -days 7305 -key ca.key -out ca.crt
    
  4. 或者可以把生成ca.keyca.crt的步骤用一条命令搞定:

     openssl req -config openssl_ca.conf -new -x509 -days 7305 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt
    
  5. 服务器server私钥server.key

     openssl genrsa -out server.key 2048
    
  6. 准备一个配置文件openssl_server.conf,内容如下,req_distinguished_name中各个字段的取值根据实际情况进行修改,注意CN字段(Common Name),取值需要和网站的域名相对应,比如为blog.ouyang.me申请证书,那么这里就要填blog.ouyang.me。不过我想给所有ouyang.me的子域名都使用同样的证书,所以这里取值填的是*.ouyang.me。同样,这个文件并不是必须的,如果没有这个文件,后一个步骤命令中不要带上-config openssl_server.conf参数就行。

     RANDFILE               = $ENV::HOME/.rnd
    
     [ req ]
     string_mask = utf8only
     utf8        = yes
     default_bits           = 2048
     default_keyfile        = server.key
     distinguished_name     = req_distinguished_name
     prompt                 = no
    
     [ req_distinguished_name ]
     C                      = CN
     ST                     = Beijing
     L                      = Beijing
     O                      = XXX Inc.
     OU                     = IT Dept.
     CN                     = *.ouyang.me
    
  7. 从服务器server私钥生成签名请求CSR文件server.csr

     openssl req -config openssl_server.conf -new -key server.key -out server.csr
    
  8. 同样,生成server.keyserver.csr也可以用一条命令来做

     openssl req -config openssl_server.conf -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
    
  9. 准备CA目录

     demoCA/
     ├── index.txt
     ├── newcerts/
     ├── private/
     └── serial
    
     # index.txt为空白文件,serial文件中输入数字如:1234.
    

    执行以下命令

     rm -rf demoCA
     mkdir -p demoCA/newcerts demoCA/private
     rm -rf demoCA/index.txt && touch demoCA/index.txt
     echo 1234 > demoCA/serial
    
  10. 使用CA生成服务器证书文件server.crt,注意参数-md sha256,现在生成消息摘要的算法,已经不建议用sha1了,chrome浏览器遇到这样的证书会给出警告,所以下面的命令里使用sha256

     openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -batch -md sha256
    
  11. 配置 gitlab

    将生成的私钥server.key和证书server.crt上传到gitlab服务器以下位置:

     /etc/gitlab/ssl/server.key
     /etc/gitlab/ssl/server.crt
    

    修改/etc/gitlab/gitlab.rb

     nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"
     nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"
    

    执行

     gitlab-ctl reconfigure
     gitlab-ctl restart
    
  12. 设置信任证书

    • macOS: 把 server.crt 或者 ca.crt 拖到 keychain里,然后双击证书选“始终信任”。
    • iOS:把 server.crt 或者 ca.crt 发送邮件给自己,然后使用iOS自带的邮件客户端收邮件,点附件即可安装。

其他相关命令

  1. 附上Root CA crt格式转换为der格式命令:

     openssl x509 -in ca.crt -outform DER -out ca.der
    

    der格式适用于移动设备导入根证书。

  2. 私钥文件(*.key)的加解密

     openssl rsa -des3 -in plain.key -out encrypted.key
     openssl rsa -in encrypted.key -out plain.key
    
  3. 查看证书文件(*.crt)中的文本信息

     openssl x509 -in ca.crt -text -noout
    
  4. 查看证书申请文件(*.csr)中的文本信息

     openssl req -in server.csr -text -noout
    

参考链接:

Comments