我搭建了一个gitlab,平时自己开发的一些小项目,会放到这上面。 想走https访问gitlab,这样安全一点,因为只有自己用,所以就没有必要去专门买个SSL证书,而是使用自签名的证书。配置步骤记录如下:
-
生成CA私钥
ca.key
openssl genrsa -out ca.key 2048
-
准备一个配置文件
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
-
生成CA根证书
ca.crt
openssl req -config openssl_ca.conf -new -x509 -days 7305 -key ca.key -out ca.crt
-
或者可以把生成
ca.key
和ca.crt
的步骤用一条命令搞定:openssl req -config openssl_ca.conf -new -x509 -days 7305 -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt
-
服务器server私钥
server.key
:openssl genrsa -out server.key 2048
-
准备一个配置文件
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
-
从服务器server私钥生成签名请求CSR文件
server.csr
:openssl req -config openssl_server.conf -new -key server.key -out server.csr
-
同样,生成
server.key
和server.csr
也可以用一条命令来做openssl req -config openssl_server.conf -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
-
准备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
-
使用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
-
配置 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
-
设置信任证书
- macOS: 把 server.crt 或者 ca.crt 拖到 keychain里,然后双击证书选“始终信任”。
- iOS:把 server.crt 或者 ca.crt 发送邮件给自己,然后使用iOS自带的邮件客户端收邮件,点附件即可安装。
其他相关命令
-
附上Root CA crt格式转换为der格式命令:
openssl x509 -in ca.crt -outform DER -out ca.der
der格式适用于移动设备导入根证书。
-
私钥文件(*.key)的加解密
openssl rsa -des3 -in plain.key -out encrypted.key openssl rsa -in encrypted.key -out plain.key
-
查看证书文件(*.crt)中的文本信息
openssl x509 -in ca.crt -text -noout
-
查看证书申请文件(*.csr)中的文本信息
openssl req -in server.csr -text -noout
参考链接:
Last modified on 2016-09-26