Skip to content

Instantly share code, notes, and snippets.

@dorianmariecom
Last active December 4, 2021 07:50
Show Gist options
  • Save dorianmariecom/40674f65ed4a9661e5bd9fb56f5d626d to your computer and use it in GitHub Desktop.
Save dorianmariecom/40674f65ed4a9661e5bd9fb56f5d626d to your computer and use it in GitHub Desktop.
Generate certificate for HTTPS on localhost macOS / Rails / Puma
#!/bin/bash
set -e
echo "> Removing certificate"
sudo security delete-certificate -c localhost || true
echo "> Generating .key"
sudo openssl genrsa -out config/localhost.key 4096
echo "> Generate .csr"
openssl req \
-new \
-passout pass:password \
-config config/localhost.conf \
-key config/localhost.key \
-out config/localhost.csr
echo "> Generate .crt"
openssl x509 \
-req \
-days 365 \
-passin pass:password \
-extfile config/localhost.conf \
-extensions req_ext \
-signkey config/localhost.key \
-in config/localhost.csr \
-out config/localhost.crt
echo "> Add certificate"
sudo security add-trusted-cert -d -r trustRoot \
-k /Library/Keychains/System.keychain \
config/localhost.crt
echo "> Remove .csr"
rm config/localhost.csr
-----BEGIN CERTIFICATE-----
MIIE+jCCAuKgAwIBAgIJAMUhTM8aQRsWMA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNV
BAMMCWxvY2FsaG9zdDAeFw0yMTEyMDMxMjM2MzhaFw0yMjEyMDMxMjM2MzhaMBQx
EjAQBgNVBAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
ggIBAJkxKlFQykIi6Ca4OZfrToeHmg/0dUCq8sOO/Mskbmxy0ApNPOa6bzd+3zKa
IEl4H5bi1J+UxlSdSgP2Fn7Wiph84OZM7VkTU3iBNdh2vsG7NnDR/JGMLq/4GOfo
bQXVueLxs8EnGGgsIoKMassJrxUNKIEUt213KZAAAoQf/hU8/T3N+WyNEAcj0IaD
83v4Ft37gg4d2Gg4CMgMipSIQ0c5HjKrqIxpsRurkC6WRxl+mrFArXY48AsD9L+k
eQosMDSqOuXPSxZnSLPQLwIIv+9MV6sQrb6bwk2HqTmmCDLVtT1EIcJ2rA0cUI17
kearmYmmeLbpfVE6EnGLNprFynVP+4Tr7SYkLn6n/sXduJRAYGKj1GhnOnNcMHQn
BXq1TIOb4dayWQXDzZOaL2n2grKOu68oaVxDveDcMq37ySn7heDyzjNhYjTDYRut
XiIhWll24R2ag+qtFCAe3X/ZnsTjVTBTw/qMZVnpN52vsS4li28qfagWhDCkCdJx
QWeuGAH/ApcAZED6FVFR1+70HslDzkoVca8tbrzn346Pv/h4lNQJGF7W+cwEtICT
iPwROMraIDQVSSCdHv1+ytVtNxDFsp4y601XBO6pW2ScL7yQRK/L8ow1X6XzwFlr
SEa997W6j9PGNDg9Ediuj4Lcgco/Twp96wXxHY//vg5dIbC5AgMBAAGjTzBNMAkG
A1UdEwQCMAAwCwYDVR0PBAQDAgTwMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
BQcDAjAUBgNVHREEDTALgglsb2NhbGhvc3QwDQYJKoZIhvcNAQEFBQADggIBAGWe
D0ZdLbW1hZ4y74Q3hniM4tJZdFMHnGwW+6pvn500L878fhAmxobOR/L98l7L5z7K
iDHm/fRLMHztIvawDSmbJ+8kCNxAjHqtjXhh2sW0DJ8t8YjhKrd+JinJOcxUZDwE
Z7XlblnMbBj6MJ7U8ysiZArRfOil8x4hjiLAX2UAz51KwtzZOQv8RTSYs9XbWMDD
49+7+n7an7kuJbwZtezehU90LQPycuCR/T736aQoqQUQKegq3x/Lv4WfUDVtXMJH
Ngp/ivEU1sGzxZxgfwMehPJpIp22DAw3lVNJuI036NTz4je7hMrm/EoocCcRvHEy
a0UPmgKUXhdqG6/1BxJo9Vh6E5Gy05KvIs0GZVsB6ZNdiIqzHW0T0oi/oXHbUdjo
qhCGvqHQ+SVoHSXCW3z+sbweF0iJdQd7NJ7KRSuf8mADtOrg80/EBD6pYt5rDOXb
jybu0OdCJx3L6Ra/An5TtDTojLn3UGgM/YXjU/z1oVXoHjYUY28Dt2SXPZo+tcSA
cOwhVOhRlOoAX3uihF1K9k+NBNZ38AYygkCVTowRjwXb4g1HDZMIx9y5ukw5UBO6
yE5LitUBlQvXxvJAf4hCoasFbXOVqljFToioiGKLeNyBsJlaJxQhrehU6kItRgNd
169AQf2taSUHVARVC4+cPNdSTOStQxE2XzM5+0Sd
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
# ...
if ENV.fetch("RAILS_ENV") == "development"
port 3080
ssl_bind(
"0.0.0.0",
3000,
key: "config/localhost.key",
cert: "config/localhost.crt",
)
else
port ENV.fetch("PORT", 3000)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment