|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "crypto/tls" |
5 | 4 | "flag" |
6 | 5 | "fmt" |
7 | | - "net" |
8 | 6 | "os" |
9 | 7 | "time" |
10 | 8 |
|
11 | | - "google.golang.org/grpc" |
12 | | - |
13 | 9 | "github.com/letsencrypt/boulder/bdns" |
14 | 10 | caPB "github.com/letsencrypt/boulder/ca/proto" |
15 | 11 | "github.com/letsencrypt/boulder/cmd" |
16 | | - "github.com/letsencrypt/boulder/core" |
17 | 12 | "github.com/letsencrypt/boulder/ctpolicy" |
18 | 13 | "github.com/letsencrypt/boulder/features" |
19 | 14 | "github.com/letsencrypt/boulder/goodkey" |
@@ -141,50 +136,48 @@ func main() { |
141 | 136 | logger.Info("No challengesWhitelistFile given, not loading") |
142 | 137 | } |
143 | 138 |
|
144 | | - var tls *tls.Config |
145 | | - if c.RA.TLS.CertFile != nil { |
146 | | - tls, err = c.RA.TLS.Load() |
147 | | - cmd.FailOnError(err, "TLS config") |
148 | | - } |
| 139 | + tlsConfig, err := c.RA.TLS.Load() |
| 140 | + cmd.FailOnError(err, "TLS config") |
149 | 141 |
|
150 | 142 | clientMetrics := bgrpc.NewClientMetrics(scope) |
151 | | - vaConn, err := bgrpc.ClientSetup(c.RA.VAService, tls, clientMetrics) |
| 143 | + vaConn, err := bgrpc.ClientSetup(c.RA.VAService, tlsConfig, clientMetrics) |
152 | 144 | cmd.FailOnError(err, "Unable to create VA client") |
153 | 145 | vac := bgrpc.NewValidationAuthorityGRPCClient(vaConn) |
154 | 146 |
|
155 | 147 | caaClient := vaPB.NewCAAClient(vaConn) |
156 | 148 |
|
157 | | - caConn, err := bgrpc.ClientSetup(c.RA.CAService, tls, clientMetrics) |
| 149 | + caConn, err := bgrpc.ClientSetup(c.RA.CAService, tlsConfig, clientMetrics) |
158 | 150 | cmd.FailOnError(err, "Unable to create CA client") |
159 | 151 | // Build a CA client that is only capable of issuing certificates, not |
160 | 152 | // signing OCSP. TODO(jsha): Once we've fully moved to gRPC, replace this |
161 | 153 | // with a plain caPB.NewCertificateAuthorityClient. |
162 | 154 | cac := bgrpc.NewCertificateAuthorityClient(caPB.NewCertificateAuthorityClient(caConn), nil) |
163 | 155 |
|
164 | | - var pubc core.Publisher |
| 156 | + raConn, err := bgrpc.ClientSetup(c.RA.PublisherService, tlsConfig, clientMetrics) |
| 157 | + cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to Publisher") |
| 158 | + pubc := bgrpc.NewPublisherClientWrapper(pubPB.NewPublisherClient(raConn)) |
| 159 | + |
165 | 160 | var ctp *ctpolicy.CTPolicy |
166 | | - if c.RA.PublisherService != nil { |
167 | | - conn, err := bgrpc.ClientSetup(c.RA.PublisherService, tls, clientMetrics) |
168 | | - cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to Publisher") |
169 | | - pubc = bgrpc.NewPublisherClientWrapper(pubPB.NewPublisherClient(conn)) |
170 | | - |
171 | | - if c.RA.CTLogGroups != nil { |
172 | | - groups := make([]cmd.CTGroup, len(c.RA.CTLogGroups)) |
173 | | - for i, logs := range c.RA.CTLogGroups { |
174 | | - groups[i] = cmd.CTGroup{ |
175 | | - Name: fmt.Sprintf("%d", i), |
176 | | - Logs: logs, |
177 | | - } |
| 161 | + conn, err := bgrpc.ClientSetup(c.RA.PublisherService, tlsConfig, clientMetrics) |
| 162 | + cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to Publisher") |
| 163 | + pubc = bgrpc.NewPublisherClientWrapper(pubPB.NewPublisherClient(conn)) |
| 164 | + |
| 165 | + if c.RA.CTLogGroups != nil { |
| 166 | + groups := make([]cmd.CTGroup, len(c.RA.CTLogGroups)) |
| 167 | + for i, logs := range c.RA.CTLogGroups { |
| 168 | + groups[i] = cmd.CTGroup{ |
| 169 | + Name: fmt.Sprintf("%d", i), |
| 170 | + Logs: logs, |
178 | 171 | } |
179 | | - ctp = ctpolicy.New(pubc, groups, nil, logger) |
180 | | - } else if c.RA.CTLogGroups2 != nil { |
181 | | - ctp = ctpolicy.New(pubc, c.RA.CTLogGroups2, c.RA.InformationalCTLogs, logger) |
182 | 172 | } |
| 173 | + ctp = ctpolicy.New(pubc, groups, nil, logger) |
| 174 | + } else if c.RA.CTLogGroups2 != nil { |
| 175 | + ctp = ctpolicy.New(pubc, c.RA.CTLogGroups2, c.RA.InformationalCTLogs, logger) |
183 | 176 | } |
184 | 177 |
|
185 | | - conn, err := bgrpc.ClientSetup(c.RA.SAService, tls, clientMetrics) |
| 178 | + saConn, err := bgrpc.ClientSetup(c.RA.SAService, tlsConfig, clientMetrics) |
186 | 179 | cmd.FailOnError(err, "Failed to load credentials and create gRPC connection to SA") |
187 | | - sac := bgrpc.NewStorageAuthorityClient(sapb.NewStorageAuthorityClient(conn)) |
| 180 | + sac := bgrpc.NewStorageAuthorityClient(sapb.NewStorageAuthorityClient(saConn)) |
188 | 181 |
|
189 | 182 | // TODO(patf): remove once RA.authorizationLifetimeDays is deployed |
190 | 183 | authorizationLifetime := 300 * 24 * time.Hour |
@@ -251,25 +244,14 @@ func main() { |
251 | 244 | err = rai.UpdateIssuedCountForever() |
252 | 245 | cmd.FailOnError(err, "Updating total issuance count") |
253 | 246 |
|
254 | | - var grpcSrv *grpc.Server |
255 | | - if c.RA.GRPC != nil { |
256 | | - serverMetrics := bgrpc.NewServerMetrics(scope) |
257 | | - var listener net.Listener |
258 | | - grpcSrv, listener, err = bgrpc.NewServer(c.RA.GRPC, tls, serverMetrics) |
259 | | - cmd.FailOnError(err, "Unable to setup RA gRPC server") |
260 | | - gw := bgrpc.NewRegistrationAuthorityServer(rai) |
261 | | - rapb.RegisterRegistrationAuthorityServer(grpcSrv, gw) |
262 | | - go func() { |
263 | | - err = cmd.FilterShutdownErrors(grpcSrv.Serve(listener)) |
264 | | - cmd.FailOnError(err, "RA gRPC service failed") |
265 | | - }() |
266 | | - } |
| 247 | + serverMetrics := bgrpc.NewServerMetrics(scope) |
| 248 | + grpcSrv, listener, err := bgrpc.NewServer(c.RA.GRPC, tlsConfig, serverMetrics) |
| 249 | + cmd.FailOnError(err, "Unable to setup RA gRPC server") |
| 250 | + gw := bgrpc.NewRegistrationAuthorityServer(rai) |
| 251 | + rapb.RegisterRegistrationAuthorityServer(grpcSrv, gw) |
267 | 252 |
|
268 | | - go cmd.CatchSignals(logger, func() { |
269 | | - if grpcSrv != nil { |
270 | | - grpcSrv.GracefulStop() |
271 | | - } |
272 | | - }) |
| 253 | + go cmd.CatchSignals(logger, grpcSrv.GracefulStop) |
273 | 254 |
|
274 | | - select {} |
| 255 | + err = cmd.FilterShutdownErrors(grpcSrv.Serve(listener)) |
| 256 | + cmd.FailOnError(err, "RA gRPC service failed") |
275 | 257 | } |
0 commit comments