下载证书
使用nginx证书
nginx配置
请将xxx.crt与xxx.key上传到服务器与nginx.conf处于同级目录。
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
server {
listen 443;
root /usr/share/nginx/html/; #站点目录
server_name www.xxx.com; #填写绑定证书的域名
ssl on;
index index.html index.htm;
ssl_certificate xxx.crt; #证书文件名称
ssl_certificate_key xxx.key; #私钥文件名称
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
}
server 是https的配置。默认端口是443,root是站点根目录,请根据nginx当前使用的站点目录进行配置。xxx请根据实际名称填写。 配置完成重启nginx,使用https访问自己的域名。更多参考
go-gin配置https
- 具体代码
gin可以直接使用nginx的证书,然而本地无法测试(签发的证书不能被任意域名使用),需要部署到被颁发证书的服务器进行测试。
router := gin.Default()
router.Use(middleware.TlsHandler())
router.Use(middleware.CrossDomain())
router.RunTLS(":8000", "./keys/xxx.crt", "./keys/xxx.key")
TlsHandler方法
package middleware
import (
"github.com/gin-gonic/gin"
"github.com/unrolled/secure"
)
// TlsHandler .
func TlsHandler() gin.HandlerFunc {
return func(c *gin.Context) {
secureMiddleware := secure.New(secure.Options{
SSLRedirect: true,
SSLHost: "localhost:8000",
})
err := secureMiddleware.Process(c.Writer, c.Request)
// If there was an error, do not continue.
if err != nil {
return
}
c.Next()
}
}
缺少的包请自行下载,CrossDomain方法是跨域设置与本主题无关。
- 测试
将go程序编译部署到服务器,并且在可执行行文件的同级目录新建keys文件夹,将Nginx的xxx.crt和xxx.key两个文件复制到keys目录下,最后运行程序测试https。