1
0

cert.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package api
  2. import (
  3. "crypto/tls"
  4. "encoding/json"
  5. "github.com/0xJacky/Nginx-UI/tool"
  6. "github.com/gin-gonic/gin"
  7. "io"
  8. "log"
  9. "net/http"
  10. "os"
  11. )
  12. func CertInfo(c *gin.Context) {
  13. domain := c.Param("domain")
  14. /*sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain +"/fullchain.cer")
  15. content, err := ioutil.ReadFile(sslCertificatePath)
  16. if err != nil {
  17. ErrorHandler(c, err)
  18. return
  19. }
  20. certDERBlock, _ := pem.Decode(content)
  21. if certDERBlock == nil {
  22. ErrorHandler(c, errors.New("pem decode error"))
  23. return
  24. }
  25. var key *x509.Certificate
  26. key, err = x509.ParseCertificate(certDERBlock.Bytes)
  27. if err != nil {
  28. ErrorHandler(c, err)
  29. return
  30. }*/
  31. ts := &http.Transport{
  32. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  33. }
  34. client := &http.Client{Transport: ts}
  35. response, err := client.Get("https://" + domain)
  36. if err != nil {
  37. ErrorHandler(c, err)
  38. return
  39. }
  40. defer func(Body io.ReadCloser) {
  41. err = Body.Close()
  42. if err != nil {
  43. ErrorHandler(c, err)
  44. return
  45. }
  46. }(response.Body)
  47. key := response.TLS.PeerCertificates[0]
  48. c.JSON(http.StatusOK, gin.H{
  49. "subject_name": key.Subject.CommonName,
  50. "issuer_name": key.Issuer.CommonName,
  51. "not_after": key.NotAfter,
  52. "not_before": key.NotBefore,
  53. })
  54. }
  55. func IssueCert(c *gin.Context) {
  56. domain := c.Param("domain")
  57. // upgrade http to websocket
  58. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  59. if err != nil {
  60. return
  61. }
  62. defer ws.Close()
  63. for {
  64. // read
  65. mt, message, err := ws.ReadMessage()
  66. if err != nil {
  67. break
  68. }
  69. if string(message) == "go" {
  70. var m []byte
  71. err = tool.IssueCert(domain)
  72. if err != nil {
  73. m, err = json.Marshal(gin.H{
  74. "status": "error",
  75. "message": err.Error(),
  76. })
  77. if err != nil {
  78. log.Println(err)
  79. return
  80. }
  81. err = ws.WriteMessage(mt, m)
  82. if err != nil {
  83. log.Println(err)
  84. return
  85. }
  86. log.Println(err)
  87. return
  88. }
  89. sslCertificatePath := tool.GetNginxConfPath("ssl/" + domain + "/fullchain.cer")
  90. _, err = os.Stat(sslCertificatePath)
  91. if err != nil {
  92. log.Println(err)
  93. return
  94. }
  95. log.Println("[found]", "fullchain.cer")
  96. m, err = json.Marshal(gin.H{
  97. "status": "success",
  98. "message": "[found] fullchain.cer",
  99. })
  100. if err != nil {
  101. log.Println(err)
  102. return
  103. }
  104. err = ws.WriteMessage(mt, m)
  105. if err != nil {
  106. log.Println(err)
  107. return
  108. }
  109. sslCertificateKeyPath := tool.GetNginxConfPath("ssl/" + domain +"/" + domain + ".key")
  110. _, err = os.Stat(sslCertificateKeyPath)
  111. if err != nil {
  112. log.Println(err)
  113. return
  114. }
  115. log.Println("[found]", "cert key")
  116. m, err = json.Marshal(gin.H{
  117. "status": "success",
  118. "message": "[found] cert key",
  119. })
  120. if err != nil {
  121. log.Println(err)
  122. }
  123. err = ws.WriteMessage(mt, m)
  124. if err != nil {
  125. log.Println(err)
  126. }
  127. log.Println("申请成功")
  128. m, err = json.Marshal(gin.H{
  129. "status": "success",
  130. "message": "申请成功",
  131. "ssl_certificate": sslCertificatePath,
  132. "ssl_certificate_key": sslCertificateKeyPath,
  133. })
  134. if err != nil {
  135. log.Println(err)
  136. }
  137. err = ws.WriteMessage(mt, m)
  138. if err != nil {
  139. log.Println(err)
  140. }
  141. }
  142. }
  143. }